我使用SignalR。 轮毂上的功能往往返回任务。 我现在有这将增加一堆组的连接的功能。 我想返回表示所有这些任务的任务。
我找到了一个完美的功能:Task.WhenAll。 然而,这是在.NET 4.5的新功能,我仍然停留在.NET 4。
因此,我决定写我自己的版本,直到我们可以移动到.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)));
}