このコードは実際に何をしますか?
public async Task Foo()
{
}
Fooではないためawait、同期的に実行されるという警告が表示されます。とまったく同じpublic void Foo()ですか?を返すことは有効なのにTask、実際に作成して返さないのはなぜですか?
同様に、次は何をしますか?
public async Task Foo()
{
await SomeOtherAsyncFn();
}
このコードは実際に何をしますか?
public async Task Foo()
{
}
Fooではないためawait、同期的に実行されるという警告が表示されます。とまったく同じpublic void Foo()ですか?を返すことは有効なのにTask、実際に作成して返さないのはなぜですか?
同様に、次は何をしますか?
public async Task Foo()
{
await SomeOtherAsyncFn();
}
を記述するpublic async Task Foo() {}と、コンパイラは実際に処理を進め、状態のないステート マシンを作成しますTask。目的を果たさない余分なオーバーヘッドがたくさんあるため、これを回避するためにコンパイラの警告が用意されています。
次のように書く方がはるかに簡単/効率的です。
public Task Foo()
{
return Task.FromResult(true);
}
これにより、同じ API がより簡単な方法で提供されます。
同様に、次は何をしますか?
public async Task Foo() { await SomeOtherAsyncFn(); }
これにより、コンパイラは を返すステート マシンを作成しますTask。を呼び出すとすぐに呼び出さSomeOtherAsyncFnれますFoo()。返されたものは、終了Taskするとすぐに完了とマークされSomeOtherAsyncFn()ます。この場合、ステート マシンは例外のバブリングもTask適切に処理するため、SomeOtherAsyncFn().