Запустить асинхронную асинхронную работу в Linq? [Дубликат]

(добавление ответа, потому что примеров с универсальными символами Generics недостаточно)

       // Source 
       List<Integer> intList = Arrays.asList(1,2,3);
       List<Double> doubleList = Arrays.asList(2.78,3.14);
       List<Number> numList = Arrays.asList(1,2,2.78,3.14,5);

       // Destination
       List<Integer> intList2 = new ArrayList<>();
       List<Double> doublesList2 = new ArrayList<>();
       List<Number> numList2 = new ArrayList<>();

        // Works
        copyElements1(intList,intList2);         // from int to int
        copyElements1(doubleList,doublesList2);  // from double to double


     static <T> void copyElements1(Collection<T> src, Collection<T> dest) {
        for(T n : src){
            dest.add(n);
         }
      }


     // Let's try to copy intList to its supertype
     copyElements1(intList,numList2); // error, method signature just says "T"
                                      // and here the compiler is given 
                                      // two types: Integer and Number, 
                                      // so which one shall it be?

     // PECS to the rescue!
     copyElements2(intList,numList2);  // possible



    // copy Integer (? extends T) to its supertype (Number is super of Integer)
    private static <T> void copyElements2(Collection<? extends T> src, 
                                          Collection<? super T> dest) {
        for(T n : src){
            dest.add(n);
        }
    }
16
задан GameScripting 2 May 2013 в 15:25
поделиться

1 ответ

Как насчет этого:

await Task.WhenAll(tasks1);
var gainStrings = tasks1.Select(t => t.Result).ToList();

Подождите, пока все задачи закончатся, а затем извлеките результаты. Это идеально, если вам все равно, в каком порядке они закончены.

EDIT2: Еще лучший способ:

var gainStrings = await Task.WhenAll(tasks1);
27
ответ дан Toni Petrina 19 August 2018 в 10:34
поделиться
  • 1
    Вместо Select вы можете просто использовать возвращаемое значение WhenAll, это будет string[] всех результатов каждой задачи. – Servy 2 May 2013 в 15:30
  • 2
    В соответствии с этим: msdn.microsoft.com/en-us/library/hh194874.aspx он сделает это, только если вы дадите ему массив. – Toni Petrina 2 May 2013 в 15:33
  • 3
    Вам не нужны ToArray(), Task.WhenAll() для IEnumerable<Task<T>>. – svick 2 May 2013 в 15:35
  • 4
    неа . Он возвращает массив результатов, даже если вы передадите IEnumerable<Task<TResult>> – Servy 2 May 2013 в 15:35
  • 5
    Приносим извинения, отредактируйте в ближайшее время. – Toni Petrina 2 May 2013 в 15:37
Другие вопросы по тегам:

Похожие вопросы: