根据这个讨论,以下两种方法应该没有区别:
public async Task Foo()
{
await DoSomethingAsync();
}
public Task Foo()
{
return DoSomethingAsync();
}
实际上,对于非常简单的方法,使用没有async/await关键字的调用似乎更受欢迎,因为它们消除了一些开销。
然而,在单元测试中,这显然并不总是奏效。
MSTest
[TestClass]
public class AsyncTest
{
[TestMethod]
public async Task Test1()
{
await Task.Delay(0);
}
[TestMethod]
public Task Test2()
{
return Task.Delay(0);
}
}
NUnit
[TestFixture]
public class AsyncTest
{
[Test]
public async Task Test1()
{
await Task.Delay(0);
}
[Test]
public Task Test2()
{
return Task.Delay(0);
}
}
XUnit
public class AsyncTest
{
[Fact]
public async Task Test1()
{
await Task.Delay(0);
}
[Fact]
public Task Test2()
{
return Task.Delay(0);
}
}
- 在所有的情况下,
Test1
通过。 - 在 MSTest 中,
Test2
在测试运行器中显示,但不运行。 在 NUnit 中,
Test2
被忽略,并显示以下消息:Test method has non-void return type, but no result is expected
在 XUnit 中,
Test2
通过。
由于在所有情况下任务仍然可以等待,那么 async
关键字如何影响 NUnit 和 MSTest 测试运行器?也许是某种反射问题吗?
Test1
和Test2
之间是有一定的区别的 :) - noseratio - open to work