Załóżmy, że mam kodu, który wygląda tak:Jak nawodnić słownik z wynikami połączeń asynchronicznych?
public async Task<string> DoSomethingReturnString(int n) { ... }
int[] numbers = new int[] { 1, 2 , 3};
Załóżmy, że chcę utworzyć słownik, który zawiera wynik wywołania DoSomethingReturnString
dla każdego numeru podobnego do tego:
Dictionary<int, string> dictionary = numbers.ToDictionary(n => n,
n => DoSomethingReturnString(n));
który wygrał” t działa, ponieważ funkcja DoSomethingReturnString zwraca wartość Task<string>
zamiast string
. Intellisense zasugerował, żebym spróbował określić moje wyrażenie lambda jako asynchroniczne, ale to też nie rozwiązało problemu.
'DoSomethingReturnString (n) .Result', ale wtedy jest to blokowanie. Jeśli nie o to chodzi, to potrzebujesz funkcji asynchronicznej, która zwraca 'Zadanie
>' –Jest to świetny przykład, dlaczego "asynchronizacja w dół" jest zasadą przewodnią podczas pracy z kodem asynchronicznym. –
Czy zażywający kod jest również asynchroniczny? –