Well, for starters, you’ll need your result to also include the key:
var tasks = clients.Select(async c => new
{
c.Key,
Value = await c.Value.ReceiveAsync(),
});
Then when the tasks finish you can put them in a dictionary:
var results = await Task.WhenAll(tasks);
var dictionary = results.ToDictionary(
pair => pair.Key, pair => pair.Value);