Подтвердить что ты не робот

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.

4b9b3361

Ответ 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());