static void Main(string[] args)
{
Action myAction = async() =>
{
await Task.Delay(5);
Console.WriteLine(Interlocked.Add(ref ExecutionCounter, 1));
};
var actions = new[] { myAction, myAction, myAction };
Task.WaitAll(actions.Select(a => Execute(a)).ToArray()); //This blocks, right?
Console.WriteLine("Done waiting on tasks.");
Console.ReadLine();
}
static int ExecutionCounter = 0;
private static Task Execute(Action a)
{
return Task.Factory.StartNew(async() =>
{
await Task.Delay(5);
a();
});
}
这似乎很简单,但当然是输出总是看起来像这样(数字变化的顺序,当然):如何等待异步任务
完成等待任务。
缺少什么我在这里?为什么Task.WaitAll
像我期待的那样阻止?
我没有答案,只是一个想法。而不是在等待中调用execute来执行,如果你在1行开始执行任务,那么在之后调用wait all?这是这里的例子:https://msdn.microsoft.com/en-us/library/dd270695(v=vs.110).aspx –
@ chris-crush-code这不会改变任何东西。 – Servy