3

2 つの非同期関数があるとします。

Result1 result1 = await getResult1();
Result2 result2 = await getResult2();
doSomething(result1, result2);

理想的には、コンパイラが私のメソッドを分析getResult2()し、結果に依存しないことを確認し、getResult1()これをコンパイルして、両方を同時に実行するようにスケジュールし、両方の結果を待ってから続行することを望みます。

質問 1:そういうことですか?

質問 2:そうでない場合、それをどのように実現し、基本型Result1Result2共有しないため、使用できません。Task.WhenAll()

4

2 に答える 2

7

それが起こるのですか?

いいえ await、多かれ少なかれ、単に「次のタスクが完了するまでコードの実行を続けないでください」という意味です。

どうすればそれを実現できますか

最初に両方のタスクを開始し、両方が完了するまで待ちます。

var firstTask = getResult1();
var secondTask = getResult2();
await Task.WhenAll(firstTask, secondTask);
doSomething(firstTask.Result, secondTask.Result);
于 2013-11-04T21:42:22.903 に答える
4
  1. いいえ、あなたのコードでは、2 番目の操作を開始する前に最初の結果を待っています。

  2. 最初に両方のタスクを開始してから、それらを待ちます。

    Task<Result1> task1 = getResult1();
    Task<Result2> task2 = getResult2();
    doSomething(await task1, await task2);
    
于 2013-11-04T21:42:13.907 に答える