vs kembali ke tugas secara langsung: return await
kepentingan dalam await
blok using
adalah sama dengan penggunaan return await
, terdapat perbezaan yang halus tetapi penting antara kedua -dua apabila menggunakan kaedah pembungkusan blok using
.
Memandangkan dua kaedah yang sama berikut:
Task<TResult> DoSomethingAsync() { using (var foo = new Foo()) { return foo.DoAnotherThingAsync(); } } async Task<TResult> DoSomethingAsync() { using (var foo = new Foo()) { return await foo.DoAnotherThingAsync(); } }
Dalam kaedah pertama, apabila kembali ke tugas secara langsung, blok using
akan segera melepaskan objek DoAnotherThingAsync
ke kaedah Foo
untuk mengembalikan kod kawalan dan segera melepaskan objek DoAnotherThingAsync
. Walau bagaimanapun, kaedah tidak boleh diselesaikan, yang boleh menyebabkan kesilapan yang berpotensi.
Sebaliknya, apabila menggunakan return await
, aliran kawalan akan menunggu sebelum pelaksanaan berterusan. Ini memastikan bahawa blok dikeluarkan hanya selepas operasi tak segerak dilaksanakan sepenuhnya. Oleh itu, kaedah kedua akan berfungsi secara normal, dan kaedah pertama boleh dikeluarkan. DoAnotherThingAsync
using
Foo
Atas ialah kandungan terperinci `kembali menunggu` vs secara langsung mengembalikan tugas: Mengapa` menanti `perkara dalam` menggunakan` blok?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!