Передача асинхронного метода в Parallel.ForEach

Dmitry S спросил: 03 ноября 2018 в 08:19 в: c#

Я читал этот пост о Parallel.ForEach, где было указано, что "Parallel.ForEach не совместим с передачей в асинхронном методе".

Итак, для проверки я пишу этот код:

static async Task Main(string[] args)
{
    var results = new ConcurrentDictionary<string, int>();    Parallel.ForEach(Enumerable.Range(0, 100), async index =>
    {
        var res = await DoAsyncJob(index);
        results.TryAdd(index.ToString(), res);
    });             Console.ReadLine();
}static async Task<int> DoAsyncJob(int i)
{
    Thread.Sleep(100);
    return await Task.FromResult(i * 10);
}

Этот код заполняет словарь results одновременно.

Кстати, я создал словарь типа ConcurrentDictionary<string, int>, потому что, если у меня есть ConcurrentDictionary<int, int>, когда я исследую его элементы в режиме отладки, я вижу, что элементы отсортированы по ключу, и я подумал, что следовательно, были добавлены элементы elenents.

Итак, я хочу знать, правильный ли мой код? Если он "не совместим с передачей в асинхронном методе", почему он работает хорошо?

0 ответов