TPL Dataflow не может дождаться завершения - PullRequest
0 голосов
/ 25 сентября 2019

Мне нужно параллельно собирать данные и впоследствии сохранять их.Итак, у меня есть следующая структура:

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 (данные отсутствуют).Как я могу убедиться, что блок обработки выполняется параллельно, но также ожидается?

...