C# “return SomeFuncAsync()”和“wait SomeFuncAsync()”之间有什么区别吗;返回;`?
简单地说,这两个功能在功能上完全相同吗C# “return SomeFuncAsync()”和“wait SomeFuncAsync()”之间有什么区别吗;返回;`?,c#,async-await,C#,Async Await,简单地说,这两个功能在功能上完全相同吗 async Task SomeFuncAsync() { await Task.Delay(1000); } async Task Foo1() { await BarAsync(); return SomeFuncAsync(); } async Task Foo2() { await BarAsync(); await SomeFuncAsync(); } 如果没有,有什么区别 (注意这与函数签名稍有不同,因为我没有考虑从函数
async Task SomeFuncAsync()
{
await Task.Delay(1000);
}
async Task Foo1()
{
await BarAsync();
return SomeFuncAsync();
}
async Task Foo2()
{
await BarAsync();
await SomeFuncAsync();
}
如果没有,有什么区别
(注意这与函数签名稍有不同,因为我没有考虑从函数签名中删除
async
。如果这是重复的,请链接,我将删除。)第一个Foo1
返回一个包装在任务中的任务
async Task Foo1()
{
await BarAsync();
return SomeFuncAsync();
}
这是因为async Task
signature将结果包装在Task
中作为返回值。这是因为您没有等待结果。但是签名中正确的返回类型应该是Task
,而不是Task>
,因为代码正在返回某些内容(在本例中是任务)
异步任务Foo1()
{
等待同步();
返回SomeFuncAsync();
}
更正此方法上的返回类型后,它与下一个方法之间的差异将变得更加明显。第一个返回一个包装在
任务中的任务
,下一个只返回一个任务
,在第二个版本中,您没有返回SomeFuncAsyn()
的结果,因此第一个实例将返回一个任务
,其中第二个版本将返回一个任务,其中T=返回类型SomeFuncAsync()
啊,我实际上是指没有返回值的任务Task
,而不是Task
。我想我应该指定它。我认为异常传播会有所不同。第一个Foo1
返回一个包装在任务中的任务。这是因为async Task
signature将结果包装在任务中作为返回值。您的编辑不会编译…,因为'Program.Foo1()'是一个返回'Task'的异步方法,返回关键字后面不能跟有对象表达式。您是否打算返回“Task”
实际上,代码没有编译。说“return type is void”我从来没有见过那个东西……消费它的是ugylvar taskOfFoo1=await Foo1();等待食物的任务
@RandRandom-可能有它的使用案例,但我还没有遇到过。这个问题如何回答“有什么区别?”?如果它不编译,这个问题就没有意义:P如果可以,我会删除它,但显然,我想保留它来教育大众。
async Task<Task> Foo1()
{
await BarAsync();
return SomeFuncAsync();
}