Мне нужно параллельно собирать данные и впоследствии сохранять их.Итак, у меня есть следующая структура:
public async Task<IActionResult> GetFullData()
{
async Task Data1Process()
{
var repository1=GetActualRepository();
basicData1 = await repository1.GetData1(true);
}
async Task Data2Process()
{
var repository2=GetActualRepository();
basicData2 = await repository2.GetData2(true);
}
…
async Task SaveData()
{
await SaveDataAsync(basicData1);
await SaveDataAsync(basicData2);
…
}
var actionBlockExecutor = new ActionBlock<Func<Task>>(async funct =>
{
await funct();
},
new ExecutionDataflowBlockOptions
{
MaxDegreeOfParallelism = DataflowBlockOptions.Unbounded,
EnsureOrdered = true
});
await CriticalDataProcess();
actionBlockExecutor.Post(Data1Process);
actionBlockExecutor.Post(Data2Process);
actionBlockExecutor.Complete();
actionBlockExecutor.Completion.Wait();
await SaveData();
return GetSaveData(); //the execution jumps here immediately
}
Выполнение не ожидается (сбор данных - тяжелая работа), и я получаю либо исключение в SaveData
(нет данных, когда выполнение попадает туда) или в операторе return
(данные отсутствуют).Как я могу убедиться, что блок обработки выполняется параллельно, но также ожидается?