Mengekalkan Jejak Tindanan Asal Semasa Melontar Semula Pengecualian Dalaman dalam C#
Penyahpepijatan dan penyelesaian masalah menjadi lebih sukar apabila surih tindanan asal hilang apabila melontar semula pengecualian dalaman dalam C#. Nasib baik, kelas ExceptionDispatchInfo
, yang diperkenalkan dalam .NET 4.5, menyediakan penyelesaian.
Penyelesaian:
Untuk mengekalkan surih tindanan yang lengkap, gunakan ExceptionDispatchInfo
seperti ini:
<code class="language-csharp">try { task.Wait(); } catch (AggregateException ex) { ExceptionDispatchInfo.Capture(ex.InnerException).Throw(); }</code>
Penjelasan:
ExceptionDispatchInfo
menangkap pengecualian dan keadaan semasanya, termasuk surih tindanan, membolehkan anda membuangnya semula kemudian tanpa mengubah maklumat ini. Ini tidak terhad kepada AggregateException
; ia berfungsi dengan mana-mana jenis pengecualian. Keupayaan ini amat berguna dengan kata kunci await
, yang sering membuka pengecualian dalaman daripada contoh AggregateException
untuk meningkatkan kesalingoperasian antara kod tak segerak dan segerak.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekalkan Jejak Tindanan Apabila Melemparkan Semula InnerExceptions dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!