Saya perlu memasukkan data ke database saya menggunakan InsertData(). Data sedang diambil menggunakan layanan lain. Kode di bawah ini dijalankan satu demi satu. Apa pendekatan terbaik untuk mengeksekusi ini secara paralel.

var taskslist = new List<Task>();
taskslist.Add(this.database.InsertData("data1", await this.service.GetData1()));
taskslist.Add(this.database.InsertData("data2", await this.service.GetData2()));
taskslist.Add(this.database.InsertData("data3", await this.service.GetData3()));
await Task.WhenAll(taskslist);
0
user3044602 4 Juli 2020, 18:06

1 menjawab

Jawaban Terbaik

Anda bisa membungkus panggilan Anda ke await dengan metode async lain:

async Task GetAndInsert(string key, Func<Task<IList<model>>> getFunc)
    => await database.InsertData(key, await getFunc());

Kemudian masing-masing dapat dijalankan secara bersamaan:

var taskslist = new List<Task>();
taskslist.Add(GetAndInsert("data1", service.GetData1));
taskslist.Add(GetAndInsert("data2", service.GetData2));
taskslist.Add(GetAndInsert("data3", service.GetData3));
await Task.WhenAll(taskslist);

Jika Anda tidak perlu menggunakan Tasks setelah selesai, Anda bahkan dapat meneruskannya langsung ke Task.WhenAll daripada membuat daftar:

await Task.WhenAll(
    GetAndInsert("data1", service.GetData1),
    GetAndInsert("data2", service.GetData2),
    GetAndInsert("data3", service.GetData3));
0
Johnathan Barclay 7 Juli 2020, 08:11