问题描述
我想使用 ActionBlock
异步处理通过 TcpClient
接收的消息。
我的问题是,有时我必须等待来自其他消息的数据。如果我只是将 await 与 taskcompletionsource
一起使用,我会陷入僵局。
例如:
taskcompletionsource tcs = new();
ActionBlock<int> actionBlock = new(async n =>
{
if (n == 1)
{
tcs.SetResult();
}
else
{
await tcs.Task;
}
});
await actionBlock.SendAsync(0);
await Task.Delay(10);
await actionBlock.SendAsync(1);
await tcs.Task;
最后一行永远不会结束,因为第二条消息永远不会被处理。
我知道,我可以增加 MaxDegreeOfParallelism
值。
但是,如果当前操作等待数据,有没有办法告诉 ActionBlock
处理下一条消息?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)