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
Susan Sarandonasal
2025-01-08 09:02:41463semak imbas

`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:

<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>

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>:

<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>

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:
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