【发布时间】:2015-02-02 14:03:24
【问题描述】:
我正在努力理解这段代码:
[TestFixture]
public class ExampleTest
{
[Test]
public void Example()
{
AwaitEmptyTask().Wait();
}
public async Task AwaitEmptyTask()
{
await new Task(() => { });
}
}
方法Example 永远不会结束并且永远阻塞。 为什么?
修复(来自Stubbing Task returning method in async unit test)是将await new Task( () => {}) 替换为return Task.FromResult<object>(null);,但同样,为什么需要这样做?
我知道有很多与此类似的问题,但我所见过的似乎都无法解释为什么会发生这种情况:
-
Await method that returns Task - spins forever?:我正确地包含了
await关键字 AFAIK - Stubbing Task returning method in async unit test:不解释原因。
- Why will an empty .NET Task not complete if started and waited for from a static constructor?:我没有在静态上下文中运行,据我所知,上下文是一致的
- Async methods return null: 也给出了解决方案,但没有解释原因
-
async await return Task:讨论
Task.FromResult,但不讨论为什么await new Task(() => {})不起作用
【问题讨论】:
-
我建议你使用
Task.Factory.StartNew不要忘记开始一个任务 -
@AlexJoukovsky 我建议他不要使用
Task.Factory.StartNew,而是使用Task.Run。 There are issues with using StartNew.
标签: c# .net asynchronous async-await task