Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “return SomeFuncAsync()”和“wait SomeFuncAsync()”之间有什么区别吗;返回;`?_C#_Async Await - Fatal编程技术网

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”我从来没有见过那个东西……消费它的是ugyl
var taskOfFoo1=await Foo1();等待食物的任务
@RandRandom-可能有它的使用案例,但我还没有遇到过。这个问题如何回答“有什么区别?”?如果它不编译,这个问题就没有意义:P如果可以,我会删除它,但显然,我想保留它来教育大众。
async Task<Task> Foo1()
{
  await BarAsync();
  return SomeFuncAsync();
}