Я читал этот пост о 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>
, когда я исследую его элементы в режиме отладки, я вижу, что элементы сортируются по ключу, и я думал, что элементы былиследовательно, добавлено.
Итак, я хочу знать, правильный ли мой код?Если он «не совместим с передачей в асинхронном методе», почему он работает хорошо?