我希望我的问题是合理的!
假设有 20 个线程(使用 ThreadPool)执行ValidateItem
方法。
_validators = new Validators[] { new Validator1(), new Validator2(), ..., new ValidatorN() };
private void ValidateItem(string item)
{
var req = new ValidationRequest(item);
foreach (var validator in _validators)
{
//------(1)
res = validator.Validate(req);
OnValidatorCompletedEvent(item, res);
if (res.Type == ValidationResultType.Invalid)
{
break;
}
}
OnAllValidatorsCompletedEvent(item, res);
}
在开始验证特定验证器之前,应检查该验证器是否已准备好。如果它不是并且没有超时,它应该稍后重试。我想在(1)中添加以下代码
while(!validator.IsReady && !(timedout > 5000))
{
Sleep(200);
timedout += 200;
}
但是所有 20 个线程都可能卡在这里,例如 on Validator10
,因此所有 20 个线程都将等待,而不是同时至少继续验证其他项目Validator1
to Validator9
。那么,我怎么能允许继续验证其他项目至少Validator1
到Validator9
以及何时Validator10
准备好它会在它被浸泡的地方继续?