Вызов асинхронного метода параллельно c # - PullRequest
0 голосов
/ 22 января 2019

У меня есть метод, который принимает int ввод и возврат Task<Dictionary<DateTime, HistPrice>>

public static async Task<Dictionary<DateTime, HistPrice>> GetPrices(int seriesId) {
    ...
    return Dictionary<DateTime, HistPrice>;
}

Теперь я хочу вызвать вышеуказанный метод для списка значений 1,2,3,4,5,6,7,8 параллельно.

List<int> seriesIdDist = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8 });

var tasks = new List<Task>();
foreach(var t in seriesIdDist) {
    tasks.Add(GetPrices(t));
}
await Task.WhenAll(tasks);

Пока все работает нормально, проблема в извлечении результата из задачи.Я пытался извлечь результат, как

foreach(var ta in tasks) {
    var res = await ta;//error in this line
}

, но он говорит

CS0815 Невозможно присвоить void неявно типизированной переменной

Что яздесь не хватает?

1 Ответ

0 голосов
/ 22 января 2019

Вместо

var tasks = new List<Task>();

Используйте это вместо:

var tasks = new List<Task<Dictionary<DateTime, HistPrice>>>();

Или замените его и цикл foreach на немного LINQ, что спасет васот необходимости беспокоиться о типе.

var tasks = seriesIdDist.Select( n => GetPrices(n) ).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...