これを検索してみましたが、直面している問題に最適な提案が見つかりませんでした。
私の問題は、利用可能なリソース (計算エンジン) のリスト/スタックがあることです。これらのリソースは、特定の計算を実行するために使用されます。
計算を実行するリクエストは、外部プロセスからトリガーされます。そのため、計算のリクエストが行われたときに、利用可能なリソースのいずれかが現在他の計算を実行していないかどうかを確認する必要があります。そうであれば、しばらく待ってからもう一度確認してください。
これを実装する最良の方法は何だろうと思っていました。次のコードが配置されていますが、非常に安全かどうかはわかりません。
さらに提案があれば、それは素晴らしいことです:
void Process(int retries = 0) {
CalcEngineConnection connection = null;
bool securedConnection = false;
foreach (var calcEngineConnection in _connections) {
securedConnection = Monitor.TryEnter(calcEngineConnection);
if (securedConnection) {
connection = calcEngineConnection;
break;
}
}
if (securedConnection) {
//Dequeue the next request
var calcEnginePool = _pendingPool.Dequeue();
//Perform the operation and exit.
connection.RunCalc(calcEnginePool);
Monitor.Exit(connection);
}
else {
if (retries < 10)
retries += 1;
Thread.Sleep(200);
Process(retries);
}
}