Обработка асинхронных вызовов в ActionBlock - PullRequest
0 голосов
/ 06 февраля 2019

У меня проблемы с обработкой асинхронной лямбды в ActionBlock.

var state = new ConcurrentBag<UsersData>();
var getData = new ActionBlock<IEnumerable<int>>(async (userIdsBatch) =>
{
    var query = _queryBuilder.GetQuery(userIdsBatch);
    string response = await _handler.GetResponseAsync(query).ConfigureAwait(false);
    UsersData userData = new Parser().GetUserData(response);
    state.Add(userData);
},
new ExecutionDataflowBlockOptions
{
    MaxDegreeOfParallelism = _MAX_DEGREE_OF_PARALLELISM // 1
});


foreach (IEnumerable<int> userIdsBatch in GetUserBatches(userIds, 10))
{
    getData.Post(userIdsBatch);
}

getData.Complete();

await getData.Completion.ConfigureAwait(false);

// merge the states for different batches synchronously.

Действие ActionBlock завершается до завершения асинхронного вызова внутри него.Несколько выполненных задач отбрасываются, но не все они выполнены.

Можно ли дождаться завершения всех задач, прежде чем синхронно объединить результаты?

...