0

我希望我的问题是合理的!

假设有 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 个线程都将等待,而不是同时至少继续验证其他项目Validator1to Validator9。那么,我怎么能允许继续验证其他项目至少Validator1Validator9以及何时Validator10准备好它会在它被浸泡的地方继续?

4

0 回答 0