Operasi Asynchronous:
Perbezaan halus antara dan await Task.Run(); return;
return Task.Run()
<code class="language-csharp">async Task TestAsync() { await Task.Run(() => DoSomeWork()); return; }</code>
<code class="language-csharp">Task TestAsync() { return Task.Run(() => DoSomeWork()); }</code>
panggilan tugas asynchronous, terdapat perbezaan halus dan penting dalam tingkah laku mereka. Task.Run()
Perbezaan utama adalah rawatan yang tidak normal. Dalam contoh pertama, penggunaan
dan akan ditangkap dan dibuang apabila kaedah asynchronous sedang menunggu kaedah tak segerak kemudian. Ini membolehkan pemanggil mengendalikan keabnormalan dengan elegan. await
DoSomeWork()
Sebaliknya, dalam contoh kedua
await
segerak di atas
Perbezaan lain berkaitan dengan konteks segerak. Dalam contoh , operasi dalam berjalan dalam konteks segerak benang panggilan. Sebaliknya, dalam contoh , beroperasi dalam konteks kolam benang yang berbeza.
Lock Dead await
DoSomeWork()
return Task.Run()
Apabila melakukan operasi tak segerak dalam aplikasi GUI dengan konteks penyegerakan bukan -default, kaedah
dari benang UI, kebuntuan mungkin berlaku. ringkasan
await
Hasil kedua -dua serpihan kod ini berbeza, terutamanya kerana ia berbeza daripada penggunaan keabnormalan dan penggunaan await
. Untuk operasi asynchronous, penggunaan dapat mengawal penyebaran yang tidak normal dan memastikan bahawa ia dilaksanakan dengan betul dalam konteks penyegerakan yang betul.
Atas ialah kandungan terperinci Menunggu tugas.run (): Apakah perbezaan antara `menunggu tugas.run (); kembali; `dan` kembali tugas.run () `?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!