(добавление ответа, потому что примеров с универсальными символами 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);
}
}
Как насчет этого:
await Task.WhenAll(tasks1);
var gainStrings = tasks1.Select(t => t.Result).ToList();
Подождите, пока все задачи закончатся, а затем извлеките результаты. Это идеально, если вам все равно, в каком порядке они закончены.
EDIT2: Еще лучший способ:
var gainStrings = await Task.WhenAll(tasks1);
Select
вы можете просто использовать возвращаемое значениеWhenAll
, это будетstring[]
всех результатов каждой задачи. – Servy 2 May 2013 в 15:30ToArray()
,Task.WhenAll()
дляIEnumerable<Task<T>>
. – svick 2 May 2013 в 15:35IEnumerable<Task<TResult>>
– Servy 2 May 2013 в 15:35