これらの2つの方法の実際的な違いは何ですか?これらを使用するという点で非同期メソッド - 待機中とタスクを返す間の差
public static Task DoSomething()
{
return FooAsync();
}
public static async Task DoSomethingAsync()
{
await FooAsync();
}
これらの2つの方法の実際的な違いは何ですか?これらを使用するという点で非同期メソッド - 待機中とタスクを返す間の差
public static Task DoSomething()
{
return FooAsync();
}
public static async Task DoSomethingAsync()
{
await FooAsync();
}
実用的な違いではありません:何も。どちらも「待つ」。
生成されるコードに若干の違いがありますが、非同期バージョンは状態マシーンになります。本当に心配するものではありません。
これらのメソッドは他に何もしないので、他のものよりも優先させるのは難しいからです。最初の(最も単純な)ものが行います。
awaitは、タスクが完了して結果を返すまで実際に待機します。あなたがタスクを返すとき、それは将来完了するタスクへのハンドルを返すので、結果を得るためのタスクを待っています。
'await'を使うメソッドは、とにかくTaskを返すので、あなたはまだ待っていなければなりません。 –
' FwaAsync() 'が終了するまで待たずに、呼び出し元に即座に戻ります。 'FooAsync()'によって返されたものはまだ完成していません)。その内部タスクが完了すると、 'DoSomethingAsync()'は最終的に 'await'の後に再開します...再開するものがないので違いはありません。それは単にコンパイラオーバーヘッドです。 –
はい私はそれが制御を放棄することに同意しますが、それは結果を待つことを待っています。私はそれを同期させることを待っているわけではありません。 –
DoSomething()
は、発信者からの質問があった場合に実行されます。 await DoSomething();
を実行すると実行されます。しかし、あなたが変数にタスクを保存し、後でそれを実行することができます。DoSomethingAsync
で
var task = DoSomething();
// Do stuff
await task();
を呼び出したときに、それが実行されます。非同期なので重複が間違っているとしてこれをマーク誰
はい、1つは非同期です。しかし、どちらも「遅延実行」を持っていますが、FooAsync()が呼び出される時期や方法はまったく異なりません。 –
[...ここで開始するには良い場所である](https://msdn.microsoft.com/en-us/library/mt674882.aspx) –
。 OPは、どちらかを使用するかどうかを尋ねるのではなく、その違いは何か、そしてその答えはリンクされた質問の答えとは大きく異なります。 – Bauss