SignalRを使用しています。ハブ上の関数は、多くの場合、タスクを返します。これで、多数のグループに接続を追加する関数ができました。これらすべてのタスクを表すタスクを返したいと思います。
そのための完璧な関数を見つけました:Task.WhenAll。ただし、これは.NET 4.5の新機能であり、私はまだ.NET4で立ち往生しています。
そのため、.NET 4.5に移行できるようになるまで、独自のバージョンを作成することにしました。マルチスレッド(スレッドプールなど)に関しては、いくつかの注意点があることが多いため、実装が正しいかどうかはわかりません。
public static Task WhenAll(IEnumerable<Task> tasks)
{
return Task.Factory.StartNew(() => Task.WaitAll(tasks.ToArray()));
}
機能的には機能すると思いますが、新しいタスク用に余分にブロックされたスレッドを取得しませんか?それともこれは避けられないのですか?
編集:SignalRでの使用方法は次のとおりです。
public static Task Add(this IGroupManager groupManager, string connectionId,
IEnumerable<string> groups)
{
return WhenAll(groups.Select(group => groupManager.Add(connectionId, group)));
}