特定の一連の操作 (HTTP 呼び出し) に対して一度に複数のタスクを実行しないようにするクラスまたはパターンを実装したいと考えています。タスクの呼び出しは、異なるスレッドからランダムに発生する可能性があります。呼び出し元が呼び出しを try-catch でラップすることによって例外を処理できるように、async-await パターンを利用したいと考えています。
以下は、意図した実行フローの図です。
呼び出し元からの疑似コード:
try {
Task someTask = GetTask();
await SomeScheduler.ThrottledRun(someTask);
}
catch(Exception ex) {
// Handle exception
}
ここでのクラスは、ソリューションによってTask
は代わりのクラスになる場合があります。Action
この質問で「スケジュール」という言葉を使用する場合、必ずしも.NET Task Schedulerに関連して使用しているわけではないことに注意してください。async-await ライブラリについては、どの角度からどのツールを使用してこの問題にアプローチするかを十分に理解していません。ここでは TaskScheduler が関連している可能性がありますが、そうでない可能性もあります。私はTAP パターンのドキュメントを読み、この問題をほぼ解決するパターンを見つけましたが、完全ではありません (インターリーブの章)。