使用等待和自制异步方法的问题

时间:2016-03-11 07:54:31

标签: c# asynchronous async-await task-parallel-library task

为什么返回Task的方法在返回实例时不会被执行。我认为这必须发生,因为await方法/委托会 将它放入一些队列,然后执行生成的任务。

那么为什么在调用Task时,Do()永远不会被执行?

public void Do()
{
    SomeTask().Wait()
}

public async Task SomeTask()
{
    return new Task(() => { Console.WriteLine("Hello World!") });
}

修改

或者我是否需要await Task.Run(...)

非常感谢!

1 个答案:

答案 0 :(得分:6)

您正在创建Task但从未启动它,因此无法完成。

使用Task.Run返回" hot" (已开始)Task代替:

return Task.Run(() => { Console.WriteLine("Hello World!") });

此外,async关键字是不必要的,因为您还没有等待创建的任务。