7

このコードを考えてみましょう:

public async Task TheBestMethodEver1()
{
// code skipped
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
  // code skipped
});

}

public Task TheBestMethodEver2()
{
  // code skipped
  return Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
  {
    // code skipped
  }).AsTask();
}

これらのメソッドは、次のように呼び出すことができます。

await TheBestMethodEverX();

これら 2 つの方法の違いは何ですか? また、通常、最初の方法を使用する必要があるのはなぜですか?

4

2 に答える 2

2

これら2つの方法の違いは何ですか?また、なぜ最初の方法を通常使用する必要があるのですか?

1つ目は、コンパイラによって生成されたステートマシンを備えており、ヒープ上に追加のガベージを作成します。したがって、2番目のものが優先されます。

詳細については、古典的なZenofAsyncのビデオをご覧ください。

于 2012-10-23T11:16:02.883 に答える
0

唯一の await が最後のステートメントである場合 (そして、他の待機可能なオブジェクトとは対照的に、タスクを待機している場合)、それをスキップしてタスクを返すこともできます。将来必要になった場合に備えて、async 修飾子を追加するのは簡単です。

于 2012-10-23T09:01:07.437 に答える