c# - 等待来自永无止境的任务的事件异步

标签 c# events .net-core channel system.threading.channels

目前我正在构建一个需要等待传入消息的网络服务器,但我需要异步等待这些消息。这些消息在另一个保持运行的任务中接收。无尽的任务推送事件,而另一个任务也需要等待这些事件之一被接收。

如果需要的话,我会画一个草图来更好地可视化问题

我已经看到了 TaskCompletionSource 类,但除非客户端断开连接,否则任务不会完成,因此它不会起作用。等待任务完全一样。

是否有适用于 C#/.net 核心的库或内置解决方案?

谢谢你:)

最佳答案

有新的Channel<T> .NET Core 2.1 和 System.Threading.Channels 中的 API让您异步使用队列:

Channel<int> channel = Channel.CreateUnbounded<int>();
...
ChannelReader<int> c = channel.Reader;
while (await c.WaitToReadAsync())
{
    if (await c.ReadAsync(out int item))
    {
         // process item...
    }
}

请引用this有关如何使用它的介绍和更多示例的博客文章。

关于c# - 等待来自永无止境的任务的事件异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57788724/

相关文章:

android - Android中的onLongPress事件多长时间?

c# - .net Avalonia 中更改窗口系统顶部栏背景颜色的更简单方法?

c# - VS 2010 设计器中控件对齐的逆序

c# - 使用 C# 不显示实际图像时裁剪图像问题

c# - 运算符 '&&' 不能应用于类型 'bool' 和 'int' 的操作数

c# - 无法在 dotnet 核心 Entity Framework 中导入 OleDbConnection

azure - Azure Web App反向代理背后的Sonarqube 6.3.1 : 401 on API post requests/Wrong CSFR in request

c# - 调用 StartXpsPrintJob1()

asp.net - 使用事件处理错误,检查是否发生错误并做出相应 react

javascript - addeventlistener 仅在 chrome 中无法正常工作