メッセージ/リクエストを受信して非同期で実行する Windows サービスを作成しています。アイテムが完了するのを待つ必要も、結果を気にする必要もありません。System.Threading.Tasks.Task を使用して、リクエストをタスクとして正常に実行できます。これらの項目のほとんどはすぐに実行されます (1 秒未満) が、一部の項目はより長く (2 ~ 3 分) かかります。
Windows サービスとして、「停止」コマンドに応答する必要があり、一部のタスクは引き続き実行されます。実行時間が長いタスクはデータを悪い状態のままにする可能性があるため、タスクをキャンセルしないことをお勧めします (ロールバックは非常にトリッキーです)。
これを処理する最善の方法は何ですか? WaitAll を実行できるように、開始したタスクのリストを保持することを考えました。サービスの実行中、何万ものリクエストが処理されます。リストが大きくならないように、完了したタスクをリストから削除するタイミングをどのように知ることができますか? それほど多くの Task オブジェクトへの参照を保持する必要はないと思います。
前もって感謝します。