Способ выполнения асинхронного параллелизма состоит в том, чтобы вызвать каждый асинхронный метод без , используя await
, а затем использовать await Task.WhenAll
.
Поскольку у вас есть коллекция, и вам нужна задача длякаждый из них, вы можете вызывать каждый асинхронный метод, используя LINQ:
var tasks = zones.Select(async zone =>
{
var req = new AttendeeRequestTO(zone.StartTime, zone.EndTime, zone.ZoneId.ToString(), accessToken);
zone.AttendanceCount = await Task.Run(() => _vClient.GetAttendeesCount(req));
}).ToList();
await Task.WhenAll(tasks);
Обратите внимание, что я также изменил StartNew
на Run
.
Было бы лучшеесли возможно, использовать метод GetAttendeesCountAsync
на вашем клиенте (при условии, что он выполняет вызов ввода / вывода).Если этот метод доступен, вы можете избежать ненужного использования пула потоков:
var tasks = zones.Select(async zone =>
{
var req = new AttendeeRequestTO(zone.StartTime, zone.EndTime, zone.ZoneId.ToString(), accessToken);
zone.AttendanceCount = await _vClient.GetAttendeesCountAsync(req);
}).ToList();
await Task.WhenAll(tasks);