Task.WhenAny-実行中の残りのタスクはどうなりますか?

アレクサンダーベスケ:

私は次のコードを持っています:

List<Task<bool>> tasks = tasksQuery.ToList();
while (tasks.Any())
{
    Task<bool> completedTask = await Task.WhenAny(tasks);
    if (await completedTask)
        return true;

    tasks.Remove(completedTask);
}

タスクを並行して起動します。最初に完了したタスクがtrueを返すと、メソッドはtrueを返します。

私の質問は:

起動され、おそらくまだバックグラウンドで実行されている残りのすべてのタスクはどうなりますか? これは非同期で並列のコードを実行するための適切な方法ですか?最初の条件が発生した後に戻る必要がありますか、それともそれらを1つずつ起動して単独で待機する方が良いですか?

ありがとう

ヘルトンバイカー:

ちなみに、私はC#クックブックの同時実行(Stephen Cleary )を読んでいるだけで、この本の一部をここで参照できると思います。

レシピ2.5から-ディスカッション

最初のタスクが完了したら、残りのタスクをキャンセルするかどうかを検討します。他のタスクがキャンセルされず、待機もされない場合、それらは放棄されます。放棄されたタスクは完了するまで実行され、その結果は無視されます。これらの中止されたタスクからの例外も無視されます。

Task.WhenAnyのもう1つのアンチパターンは、完了したタスクを処理しています。最初は、タスクのリストを保持し、完了時に各タスクをリストから削除するのは合理的なアプローチのようです。このアプローチの問題は、O(N)アルゴリズムが存在する場合、O(N ^ 2)時間で実行されることです。

それ以外にも、WhenAnyきっと正しいアプローチだと思いますすべてのタスクに同じもの渡す次のLeonidアプローチを検討しCancellationToken、最初のタスクが戻った後でそれらをキャンセルしてください。それでも、これらの操作のコストが実際にシステムに負担をかけている場合に限ります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Task.WhenAny-実行中の残りのタスクはどうなりますか?

分類Dev

Task <int>はどのようにしてintになりますか?

分類Dev

async / awaitとTask.WhenAllを使用して、アイテムが1つしかない場合でも2つのタスクが実行されます

分類Dev

この単体テストでTask.ContinueWithが実行に失敗するのはなぜですか?

分類Dev

asyncioを使用しようとすると、「RuntimeError:タスクTaskのジェネレーターからのyieldの代わりにyieldが使用されました」というメッセージが表示されるのはなぜですか?

分類Dev

タスクを実行せずにアクションをFunc <Task>に変換するにはどうすればよいですか?

分類Dev

どのスケジューラでTask.ContinueWith()が実行されますか?

分類Dev

すでに実行中または実行中のタスクを待つとどうなりますか?

分類Dev

Task.WaitAll()はどのように動作しますか?

分類Dev

うなり声タスクは他のうなり声タスクを実行できますか?

分類Dev

Task.WhenAnyは、いくつかのタスクを他のタスクよりも優先しますか?

分類Dev

nopcommerceタスクでThread.SleepまたはTask.Delayを使用する必要がありますか?

分類Dev

Task.WhenAllでタスクが完了したときのコールバックはありますか

分類Dev

複数のタスクを実行すると、TaskCanceledExceptionがTask.Exceptionプロパティに保存されないのはなぜですか?

分類Dev

Task.Runはタスクの開始に時間がかかります

分類Dev

Taskとの違いはありますか?voidメソッドを実行し、Taskメソッドがnullを返しますか?

分類Dev

Task.WhenAny-タスクがキャンセルされました

分類Dev

同じTaskCompletionSourceに対して何度も呼び出されたときにTask.WhenAnyが非常に遅いのはなぜですか?

分類Dev

Task.WhenAny ContinueWith:引数を取得しますか?

分類Dev

ネストされたTask.WhenAllsと同等のエレガントな方法はありますか?

分類Dev

Type.IsGenericTypeがメソッドからのリフレクションによって取得された戻り値の型なしでタスクに対してTRUEを返すのに、typeof(Task).IsGenericTypがFALSEを返すのはなぜですか

分類Dev

Task.Waitは、まだ実行されていない場合、タスクを開始しませんか?

分類Dev

辞書を使用したTask.WhenAnyの使用

分類Dev

Task <T>の代わりにTaskを返すのは明らかに間違っていますか?

分類Dev

非同期C#Tasks.WhenAny

分類Dev

カーネルは、プロセスがTASK_RUNNING(実行中)またはTASK_RUNNING(準備完了)の状態にあることをどのように認識しますか?

分類Dev

ASP.NetアプリケーションでTask.WhenAny()を使用することによるパフォーマンスへの影響

分類Dev

@periodic_taskを呼び出し時にのみ実行する方法はありますか?プロジェクトの開始時に自動的に実行されますか?

分類Dev

celeryperiodic_taskの停止タスクをどのように完了しましたか?

Related 関連記事

  1. 1

    Task.WhenAny-実行中の残りのタスクはどうなりますか?

  2. 2

    Task <int>はどのようにしてintになりますか?

  3. 3

    async / awaitとTask.WhenAllを使用して、アイテムが1つしかない場合でも2つのタスクが実行されます

  4. 4

    この単体テストでTask.ContinueWithが実行に失敗するのはなぜですか?

  5. 5

    asyncioを使用しようとすると、「RuntimeError:タスクTaskのジェネレーターからのyieldの代わりにyieldが使用されました」というメッセージが表示されるのはなぜですか?

  6. 6

    タスクを実行せずにアクションをFunc <Task>に変換するにはどうすればよいですか?

  7. 7

    どのスケジューラでTask.ContinueWith()が実行されますか?

  8. 8

    すでに実行中または実行中のタスクを待つとどうなりますか?

  9. 9

    Task.WaitAll()はどのように動作しますか?

  10. 10

    うなり声タスクは他のうなり声タスクを実行できますか?

  11. 11

    Task.WhenAnyは、いくつかのタスクを他のタスクよりも優先しますか?

  12. 12

    nopcommerceタスクでThread.SleepまたはTask.Delayを使用する必要がありますか?

  13. 13

    Task.WhenAllでタスクが完了したときのコールバックはありますか

  14. 14

    複数のタスクを実行すると、TaskCanceledExceptionがTask.Exceptionプロパティに保存されないのはなぜですか?

  15. 15

    Task.Runはタスクの開始に時間がかかります

  16. 16

    Taskとの違いはありますか?voidメソッドを実行し、Taskメソッドがnullを返しますか?

  17. 17

    Task.WhenAny-タスクがキャンセルされました

  18. 18

    同じTaskCompletionSourceに対して何度も呼び出されたときにTask.WhenAnyが非常に遅いのはなぜですか?

  19. 19

    Task.WhenAny ContinueWith:引数を取得しますか?

  20. 20

    ネストされたTask.WhenAllsと同等のエレガントな方法はありますか?

  21. 21

    Type.IsGenericTypeがメソッドからのリフレクションによって取得された戻り値の型なしでタスクに対してTRUEを返すのに、typeof(Task).IsGenericTypがFALSEを返すのはなぜですか

  22. 22

    Task.Waitは、まだ実行されていない場合、タスクを開始しませんか?

  23. 23

    辞書を使用したTask.WhenAnyの使用

  24. 24

    Task <T>の代わりにTaskを返すのは明らかに間違っていますか?

  25. 25

    非同期C#Tasks.WhenAny

  26. 26

    カーネルは、プロセスがTASK_RUNNING(実行中)またはTASK_RUNNING(準備完了)の状態にあることをどのように認識しますか?

  27. 27

    ASP.NetアプリケーションでTask.WhenAny()を使用することによるパフォーマンスへの影響

  28. 28

    @periodic_taskを呼び出し時にのみ実行する方法はありますか?プロジェクトの開始時に自動的に実行されますか?

  29. 29

    celeryperiodic_taskの停止タスクをどのように完了しましたか?

ホットタグ

アーカイブ