Rumah >pembangunan bahagian belakang >C++ >Sekiranya anda kembali `tugas` secara langsung atau gunakan` pulangan menunggu` dalam pengaturcaraan tak segerak?
Nilai pulangan dalam pengaturcaraan asynchronous: terus kembali
atau gunakan ? Task
return await
Dalam pengaturcaraan asynchronous, pemaju sering terjerat dalam mengembalikan atau menggunakan struktur
melalui adegan tertentu. Task<T>
return await
Mengapa pilih return await
bukannya kembali
Di bawah keadaan biasa, kembali return await
dan Task<T>
fungsi struktur. Walau bagaimanapun, terdapat perbezaan halus antara kedua -dua apabila pernyataan atau lebih biasa digunakan dalam blok .
sila pertimbangkan contoh kod berikut: Task<T>
return await
using
try
analisis adegan return await
Dalam kaedah pertama (
), pernyataan<code class="language-csharp">Task<SomeResult> DoSomethingAsync() { using (var foo = new Foo()) { return foo.DoAnotherThingAsync(); } }</code>akan segera melepaskan objek
<code class="language-csharp">async Task<SomeResult> DoSomethingAsync() { using (var foo = new Foo()) { return await foo.DoAnotherThingAsync(); } }</code>sebaik sahaja selepas kaedah
pulangan. Ini mungkin berlaku untuk masa yang lama sebelum kaedah selesai, dan kesilapan disebabkan oleh pelepasan pramatang.
Sebaliknya, kaedah kedua (menggunakan) akan menunggu sebelum kaedah await
selesai, dan kemudian lepaskan using
. Ini memastikan pelepasan yang betul dan operasi biasa . DoAnotherThingAsync()
Foo
Kesimpulan Foo
Walaupun await
biasanya bersamaan dengan fungsi DoAnotherThingAsync()
secara langsung, yang terakhir lebih baik daripada menggunakan pernyataan Foo
atau dalam adegan Foo
di blok
Atas ialah kandungan terperinci Sekiranya anda kembali `tugas` secara langsung atau gunakan` pulangan menunggu` dalam pengaturcaraan tak segerak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!