TPL を使用して、複数の IO ソース (「スレッドレス」タスク) から結果を収集し、ソースごとにスレッド ベースのタスクを生成して監視することなく、それぞれのソースからの結果をシーケンスにマージするにはどうすればよいですか? 1 つのスレッドからソースをポーリングしても安全でしょうか?
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);
}
...
そのようなものはどうですか?