Pemahaman await Task<T>
dan Task<T>.Result
dalam Pengaturcaraan Asynchronous
Dalam dunia pengaturcaraan tak segerak, pilihan antara await Task<T>
dan Task<T>.Result
adalah penting. Kedua-duanya mengendalikan operasi tak segerak, tetapi tingkah laku mereka berbeza dengan ketara.
Task<T>.Result
Sifat Task<T>.Result
menyekat urutan semasa secara serentak sehingga tugasan selesai. Walaupun ini menyediakan akses segera kepada hasil tugasan, ia dikenakan kos: penyekatan benang. Ini boleh menjejaskan prestasi dengan teruk jika tugasan itu panjang.
await Task<T>
Kata kunci await
, yang digunakan dalam kaedah async
, membolehkan operasi tak segerak. Pengkompil menjana mesin keadaan, membenarkan benang menghasilkan pelaksanaan sehingga tugas selesai. Ini bermakna kod lain boleh dijalankan serentak, meningkatkan kecekapan. Setelah tugas selesai, mesin keadaan disambung semula dan kod berikut await
mengakses hasilnya.
Perbezaan Utama Diringkaskan
Perbezaan teras terletak pada gelagat benang: await
melepaskan benang, manakala Task<T>.Result
menyekatnya. await
memanfaatkan model tak segerak, mengelakkan kesesakan prestasi.
Cadangan: Utamakan await
Secara amnya, await
diutamakan daripada Task<T>.Result
. Ia mengelak daripada menyekat dan memanfaatkan kelebihan pengaturcaraan tak segerak. Walau bagaimanapun, jika akses hasil segera adalah wajib, Task<T>.Result
boleh digunakan, tetapi dengan kesedaran akibat penyekatan benang.
Pertimbangan Penting:
Task<T>.Result
membalut pengecualian dalam AggregateException
. await
menaikkan semula pengecualian asal.Task.Factory.StartNew
dan Task<T>.Result
mungkin sesuai untuk keselarian tugasan dinamik, tetapi Task.Run
biasanya lebih disukai untuk operasi tak segerak.Dengan memahami nuansa ini, anda boleh membuat keputusan termaklum tentang cara terbaik mengurus tugas tak segerak dalam aplikasi anda.
Atas ialah kandungan terperinci `menunggu Tugas` lwn. `Keputusan Tugas`: Bilakah Saya Perlu Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!