LINQ Выберите в словаре
Я пытаюсь взять Select
и проецировать каждый элемент в Dictionary<string, UdpReceiveResult>
В настоящее время у меня есть Select
, который просто передает значение Dictionary
в список tasks
типа UdpReceiveResult
. clients
- словарь типа Dictionary<string, UdpClient>
. У меня
var tasks = clients.Select(c => c.Value.ReceiveAsync()).OrderByCompletion();
Я хочу проецировать ключ и результат ReceiveAsync()
в новый Dictionary
. OrderByCompletion
- это файл Nito.AsyncEx.
Ответы
Ответ 1
Хорошо, для начала вам понадобится ваш результат, чтобы также включить ключ:
var tasks = clients.Select(async c => new
{
c.Key,
Value = await c.Value.ReceiveAsync(),
});
Затем, когда задачи заканчиваются, вы можете поместить их в словарь:
var results = await Task.WhenAll(tasks);
var dictionary = results.ToDictionary(
pair => pair.Key, pair => pair.Value);
Ответ 2
Этот код выполнит то же самое в одной строке кода.
var tasks = clients.ToDictionary(c => c.Key, c => c.Value.ReceiveAsync());