ただの個人的な調査結果です。 C#で、次のような要求があると仮定します。 1つ以上のソース(UIなりネットワークなり)からデータが入ってくる データが入るスレッドは待たせない 入ったデータは1系列に整理(シリアライズ)され、すぐに処理(UIへの反映など) 上記の入力は、アプリケーション全体の中で、0回以上(せいぜい数回)、ON/OFFされる 全体像 全体としては、「UIから、ある程度時間のかかる作業を起こす」のではなく「UIと並列で処理する。時々開始や終了がある(のでアプリケーションよりは短いライフサイクルとなる)」ものなので、async/awaitではなくTaskを直接扱うことにします*1。 シリアライズには、C# 4.0で加わったSystem.Collection.Concurrent.BlockingCollection<T>クラスがあっています。 今回は、入力ON/OFFをボタンの