我正在尝试使用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 dll。
答案 0 :(得分:43)
嗯,首先,您需要将结果包括在内:
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);
答案 1 :(得分:24)
此代码将在一行代码中完成相同的操作。
var tasks = clients.ToDictionary(c => c.Key, c => c.Value.ReceiveAsync());