这段代码实际上做了什么?
public async Task Foo()
{
}
Run Code Online (Sandbox Code Playgroud)
你得到一个警告,因为Foo没有await,它将同步运行.它完全等同于public void Foo()?为什么返回有效Task,但实际上不创建并返回一个?
同样,以下是做什么的?
public async Task Foo()
{
await SomeOtherAsyncFn();
}
Run Code Online (Sandbox Code Playgroud)
当你编写时public async Task Foo() {},编译器实际上会通过并创建一个没有状态的状态机,它会立即返回Task.有很多额外的开销没有任何用处,这就是为什么有一个编译器警告来避免这种情况.
只写:它会更简单/更有效:
public Task Foo()
{
return Task.FromResult(true);
}
Run Code Online (Sandbox Code Playgroud)
这将以更简单的方式提供相同的API.
同样,以下是做什么的?
Run Code Online (Sandbox Code Playgroud)public async Task Foo() { await SomeOtherAsyncFn(); }
这会导致编译器创建一个将返回a的状态机Task.它会SomeOtherAsyncFn在你打电话时立即打电话Foo().Task一旦SomeOtherAsyncFn()完成,返回的标记将被标记为已完成.在这种情况下,状态机还将为您干净地处理异常冒泡,因此Task如果出现异常,异常将被映射到正确的异常SomeOtherAsyncFn().
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |