使用TPL,如何从多个IO源(“无线”任务)收集结果并将它们合并为序列各自的源不会产生每个源的基于线程的任务来监视它们?从一个线程轮询来源是否安全?从单个基于线程的任务收集来自多个基于IO的任务的数据
while (true)
{
try
{
IEnumerable<UdpClient> readyChannels =
from channel in channels
where channel.Available > 0
select channel;
foreach(UdpClient channel in readyChannels)
{
var result = await channel.ReceiveAsync();
//do something with result like post to dataflow block.
}
}
catch (Exception e)
{
throw (e);
}
...
这样的事情呢?
while循环真的需要在这里?只是好奇而已 –
@CongLong - 我想继续调查和阅读我的udp资源。 – Eric
可以用Task.WhenAny或类似的结构来做这种事情,但我认为更好的匹配是为每个UdpClient暴露一个IObservable或ISourceBlock。 Rx或TPL Dataflow可以更好地匹配这样的“推送”事件。 –