C# 异步任务的返回值是多少?
假设我有这个C# 异步任务的返回值是多少?,c#,.net,async-await,C#,.net,Async Await,假设我有这个async方法: public async Task Foo(object fooObj) { //do foo's stuff. //maybe set a fooable static global variable //or write some data to fooObj } void Foo() { // Do some actions. ... // No need for a return statement } a
async
方法:
public async Task Foo(object fooObj)
{
//do foo's stuff.
//maybe set a fooable static global variable
//or write some data to fooObj
}
void Foo()
{
// Do some actions.
...
// No need for a return statement
}
async Task Foo()
{
// Do some actions (presumably using await)
...
// No need for a return statement
}
async Task Foo()
{
if (weDontNeedToDoAnything)
{
return; // This is fine
}
// Do some actions (presumably using await)
...
// No need for a return statement
}
把它叫做:
public async void FooCaller()
{
await Foo(new dummyObject)
}
好的,那么:第一个代码块返回一个任务
,但实际上它并没有返回到任何地方
我可以想象async
关键字的情况下会出现一些编译器异常,否则需要返回值
但如果是这种情况,返回值是如何初始化的?(好的,我可以自己检查一下)
更重要的是:
使用此模式时是否存在任何陷阱?(例如:访问fooObj
,延迟执行时间等)
好的,那么:第一个代码块返回一个任务,但实际上它并没有返回到任何地方
的确如此。您可以将其视为类似于任务
——如果这是有效的话。它用于指示异步方法何时完成
基本上,任何非void异步方法都会包装任务中返回的任何内容。例如:
async Task<string> FooAsync()
{
// Do some async operations
return "foo";
}
对于async任务
方法,同样适用:
public async Task Foo(object fooObj)
{
//do foo's stuff.
//maybe set a fooable static global variable
//or write some data to fooObj
}
void Foo()
{
// Do some actions.
...
// No need for a return statement
}
async Task Foo()
{
// Do some actions (presumably using await)
...
// No need for a return statement
}
async Task Foo()
{
if (weDontNeedToDoAnything)
{
return; // This is fine
}
// Do some actions (presumably using await)
...
// No need for a return statement
}
您可以在异步任务
方法中使用return
语句(无值):
public async Task Foo(object fooObj)
{
//do foo's stuff.
//maybe set a fooable static global variable
//or write some data to fooObj
}
void Foo()
{
// Do some actions.
...
// No need for a return statement
}
async Task Foo()
{
// Do some actions (presumably using await)
...
// No need for a return statement
}
async Task Foo()
{
if (weDontNeedToDoAnything)
{
return; // This is fine
}
// Do some actions (presumably using await)
...
// No need for a return statement
}