Mengendalikan pengecualian dalam kaedah lompang tak segerak
Dalam .NET Async CTP Microsoft, kaedah tak segerak berkelakuan berbeza apabila melontar pengecualian. Dalam kaedah Tugas asynchronous atau Task
Pengecualian tangkap
Untuk menangkap pengecualian yang dilemparkan oleh kaedah kekosongan tak segerak, anda mesti menunggu secara eksplisit panggilan kaedah atau menggunakan kaedah Tunggu():
Menunggu panggilan kaedah:
<code class="language-csharp"> public async Task Foo() { var x = await DoSomethingAsync(); } public async void DoFoo() { try { await Foo(); } catch (ProtocolException ex) { // 由于在异步方法中等待了调用,因此将捕获异常。 } }</code>
Gunakan kaedah Tunggu():
<code class="language-csharp"> public void DoFoo() { try { Foo().Wait(); } catch (ProtocolException ex) { // 由于等待了调用的完成,因此将捕获异常。 } }</code>
Ralat mengendalikan semantik
Seperti yang Stephen Cleary nyatakan, kaedah kekosongan tak segerak mempunyai semantik pengendalian ralat yang berbeza:
"Apabila kaedah async void melontarkan pengecualian, pengecualian dibangkitkan terus pada SynchronizationContext yang aktif semasa kaedah asynchronous void dimulakan."
Arahan lain
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangkap Pengecualian daripada Kaedah Async Void dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!