Apakah mungkin menunggu objek anonim (atau Tuple, tidak peduli) yang berisi Tugas ... lebih baik dijelaskan dengan kode ...

Katakanlah kita memiliki ini:

async Task<Item> GetItem(int i);

Kasus dasar (berfungsi):

var itemTasks = new []{1,2,3}.Select(i => GetItem(i)).toArray();
Item[] items = await Task.WhenAll(itemTasks);

apa yang ingin saya lakukan

var itemTasks = new []{1,2,3}
    .Select(i => new { MyItem = GetItem(i), TheNumber = i })
    .toArray();
//some way to wait for all and get a collection of<anynomous type above> 
1
Cowborg 28 Mei 2021, 10:35

1 menjawab

Jawaban Terbaik

Anda hanya perlu membuat lambda Anda async:

var itemTasks = new []{ 1, 2, 3 }
    .Select(async i => new { MyItem = await GetItem(i), TheNumber = i });

var anonymousObjects = await Task.WhenAll(itemTasks);

Lambda async secara implisit akan mengembalikan Task<AnonymousObject>.


Selain itu, ToArray() Anda berlebihan, karena Task.WhenAll tetap menghitung Task.

3
Johnathan Barclay 28 Mei 2021, 07:46