await Task<T>
lwn. Task<T>.Result
dalam Pengaturcaraan Asynchronous
Memahami perbezaan teras antara await Task<T>
dan Task<T>.Result
adalah penting untuk pengaturcaraan tak segerak yang berkesan. Mari kita ilustrasikan ini dengan contoh praktikal.
Pertimbangkan kaedah ini:
<code class="language-csharp">public async Task<string> GetName(int id) { Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id)); return nameTask.Result; }</code>
Di sini, Task<T>.Result
digunakan untuk mendapatkan semula hasil tugasan. Walau bagaimanapun, pendekatan ini boleh memberi kesan yang teruk kepada keselarasan kerana ia memaksa urutan panggilan menunggu serentak untuk penyiapan tugas.
Pengaturcaraan tak segerak menyelesaikan masalah ini dengan elegan menggunakan operator await
, yang membolehkan penggantungan tidak menyekat. Berikut ialah versi tak segerak yang dipertingkatkan:
<code class="language-csharp">public async Task<string> GetName(int id) { Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id)); return await nameTask; }</code>
Dengan await
, urutan panggilan dikeluarkan, membenarkan tugasan lain diteruskan. Setelah tugasan yang ditunggu-tunggu selesai, utas disambung semula dan hasilnya dikembalikan dengan lancar.
Pada dasarnya: await Task<T>
memudahkan operasi tak segerak sebenar dengan menghasilkan benang, manakala Task<T>.Result
menyekat benang sehingga tugasan selesai. Perbezaan penting ialah cara pengecualian dikendalikan: Result
membalut pengecualian dalam AggregateException
, manakala await
melontar semula pengecualian asal secara langsung.
Atas ialah kandungan terperinci Tunggu Tugasan lwn Tugasan. Keputusan: Apakah Perbezaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!