Suppose I have code that looks like this:
public async Task DoSomethingReturnString(int n) { ... }
int[] numbers = new int[] { 1, 2 , 3};
If you insist on doing it with linq, Task.WhenAll is the key to "hydrate" the dictionary:
int[] numbers = new int[] { 1, 2 , 3};
KeyValuePair[] keyValArray = //using KeyValuePair<,> to avoid GC pressure
await Task.WhenAll(numbers.Select(async p =>
new KeyValuePair(p, await DoSomethingReturnString(p))));
Dictionary dict = keyValArray.ToDictionary(p => p.Key, p => p.Value);