以下代码(
相反,它启动了5个任务,并立即输出
问题在于
这里发生了什么?对我来说没有任何意义,因为在我看来,此转换是多余的。
LINQPad
示例)预计创建5个工作任务并等待它们全部完成。相反,它启动了5个任务,并立即输出
"... Done"
- 消息。问题在于
Task.Run
之后的(Action)
- 转换。如果我删除该转换,则一切都按预期工作。这里发生了什么?对我来说没有任何意义,因为在我看来,此转换是多余的。
void Main()
{
var tasks = Enumerable.Range(1, 5).Select(x => this.DoWork()).ToArray();
Console.WriteLine("Waiting ... ");
Task.WaitAll(tasks);
Console.WriteLine("... Done");
}
Task DoWork()
{
return Task.Run(
(Action)(async () =>
{
Console.WriteLine("Task start");
await Task.Delay(3000);
Console.WriteLine("Task end");
}));
}
DoWork
中创建的任务的()
前删除async
。你创建的任务会创建另一个任务,但它不会等待该任务完成并立即返回。 - Lee