10

そのような非同期メソッド本体がある場合-

public async Task GetSomething() {

    await SendText("hi");
    await SendImage("bla.bmp");

}

待機が開始されたときにユーザーに返される前に Task オブジェクトを取得するにはどうすればよいですか

つまり..

public async Task GetSomething() {

    myTasks.Add(Task.Current);
    await SendText("hi");
    await SendImage("bla.bmp");

    //some processing

}

他の場所でできるように

 await Task.WhenAll(myTasks);
 Console.WriteLine("All tasks complete");

これは、シャットダウンする前にすべてのタスクが完了するのを待つことができるようにするためです

4

1 に答える 1

9

言語には「現在の」タスクにアクセスする機能がないため、これを直接行うことはできません。

ただし、回避策があります。非同期メソッドを別のメソッドでラップします。この他のメソッドは、非同期メソッドが戻ると、タスクを取得できます (これは、ほぼ最初の await ポイントで発生します)。

いずれの場合も、非同期メソッド自体ではなく、呼び出し元に非同期タスクをリストに追加させることをお勧めします。これは、カプセル化の観点からも役立ちます。

于 2013-01-13T11:55:44.027 に答える