我目前有一个对传入数据运行一组“规则”的服务方法。其中一些规则执行简单的检查,例如验证 ID 号,还有一些会到数据库中查找信息。它看起来很像这样:
public void RunRules(ValidationRequest request)
{
// Each rule returns bool for this example
var rules = GetRules();
var results = List<bool>();
Parallel.ForEach(rules, rule =>
{
var result = rule();
lock(results)
results.Add(result);
});
foreach(var result in results)
{
RecordResultInDatabase(result);
}
CallNextService(someNewRequest);
}
我认为(但不确定)我可以使用async/await
. 我的想法是,当一个规则完成时,它可以RecordResultInDatabase
在其他规则仍在运行时调用。
不过,作为一项要求,我不希望在CallNextService
所有规则都运行并将其结果记录在数据库中之前进行调用。
问题是我绝对是菜鸟async/await
,我认为(但不确定)这Task.WaitAll
可能是我正在寻找的东西。
我非常不确定如何做到这一点,但我猜是这样的:
List<Task<bool>> ruleTasks = GetRules();
Task.WaitAll(ruleTasks);
// Somehow get the results of the rules and record them in the db???