我尝试搜索此内容,但没有找到最适合我所面临问题的建议。
我的问题是我们有可用资源的列表/堆栈(计算引擎)。这些资源用于执行某些计算。
执行计算的请求是从外部进程触发的。因此,当发出计算请求时,我需要检查是否有任何可用资源当前没有执行其他计算,如果是,请等待一段时间再检查。
我想知道实现这一点的最佳方法是什么。我有以下代码,但不确定它是否非常安全。
如果您有任何进一步的建议,那就太好了:
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);
}
}