現在、受信データに対して一連の「ルール」を実行するサービス メソッドがあります。これらのルールには、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
。私の考えでは、1 つのルールが終了すると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???