Rumah > pembangunan bahagian belakang > C++ > `Task.Result` lwn. `menunggu Tugas`: Bilakah Anda Harus Menggunakan Yang Mana?

`Task.Result` lwn. `menunggu Tugas`: Bilakah Anda Harus Menggunakan Yang Mana?

Susan Sarandon
Lepaskan: 2025-01-08 09:02:41
asal
476 orang telah melayarinya

`Task.Result` vs. `await Task`: When Should You Use Which?

Pemahaman Task<T>.Result dan await Task<T> dalam Pengaturcaraan Asynchronous

Dalam pengaturcaraan tak segerak, pilihan antara await Task<T> dan Task<T>.Result memberi kesan ketara kepada prestasi dan pengendalian pengecualian. Mari kita periksa perbezaan utama.

Kaedah GetName menggambarkan kedua-dua pendekatan:

Menggunakan Task<T>.Result:

public async Task<string> GetName(int id)
{
    Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id));
    return nameTask.Result;
}
Salin selepas log masuk

nameTask.Result menyekat urutan semasa sehingga tugasan selesai. Ini tidak cekap untuk operasi yang berjalan lama, yang berpotensi menyebabkan aplikasi terhenti.

Menggunakan await Task<T>:

public async Task<string> GetName(int id)
{
    Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id));
    return await nameTask;
}
Salin selepas log masuk

await nameTask mengeluarkan urutan panggilan, membenarkan tugasan lain dilaksanakan serentak. Kaedah disambung semula hanya apabila nameTask selesai.

Perbezaan Kritikal:

  • Sekatan Benang: Task<T>.Result blok; await Task<T> tidak.
  • Pengendalian Pengecualian: await Task<T> menyebarkan pengecualian secara langsung; Task<T>.Result membungkusnya dengan AggregateException.

Amalan Terbaik:

  • Elakkan Task.Factory.StartNew untuk tugasan latar belakang; gunakan Task.Run sebaliknya untuk kecekapan yang lebih baik dan penyepaduan yang lebih baik dengan kumpulan benang .NET.
  • Walaupun Task<T>.Result dan Task.Factory.StartNew boleh digunakan untuk keselarian tugasan dinamik, mereka secara amnya tidak digalakkan dalam konteks pengaturcaraan tak segerak yang memihak kepada await untuk responsif dan kebolehselenggaraan yang lebih baik. Menggunakan await ialah pendekatan pilihan dan lebih mantap untuk operasi tak segerak.

Atas ialah kandungan terperinci `Task.Result` lwn. `menunggu Tugas`: Bilakah Anda Harus Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan