简单地说,这两个功能在功能上完全相同吗?
async Task SomeFuncAsync()
{
await Task.Delay(1000);
}
async Task Foo1()
{
await BarAsync();
return SomeFuncAsync();
}
async Task Foo2()
{
await BarAsync();
await SomeFuncAsync();
}
如果没有,有什么区别?
第一个Foo1
返回包含在任务中的任务。
async Task Foo1()
{
await BarAsync();
return SomeFuncAsync();
}
这是因为async Task
签名将结果包装在Task
中作为返回值。发生这种情况是因为您没有等待结果。签名中的正确返回类型应该是Task<Task>
,而不是Task>
,因为代码返回了某些东西(在本例中是一个Task)。
async Task<Task> Foo1()
{
await BarAsync();
return SomeFuncAsync();
}
一旦你在这个方法上更正了返回类型,它与下一个方法之间的差异就会变得更加明显。第一个返回包裹在Task
中的Task
,下一个返回一个Task
。