`return SomeFuncAsync()`和`await SomeFuncAsync();之间有什么区别吗?返回;`?

问题描述 投票:1回答:1

简单地说,这两个功能在功能上完全相同吗?

async Task SomeFuncAsync()
{
  await Task.Delay(1000);
}

async Task Foo1()
{
  await BarAsync();
  return SomeFuncAsync();
}

async Task Foo2()
{
  await BarAsync();
  await SomeFuncAsync();
}

如果没有,有什么区别?

(注意这与thisthis略有不同,因为我不考虑从我的函数签名中删除async。如果这是重复的,请链接,我将删除。)

c# async-await
1个回答
1
投票

第一个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

© www.soinside.com 2019 - 2024. All rights reserved.