Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengekalkan Jejak Tindanan Apabila Melemparkan Semula InnerExceptions dalam C#?

Bagaimanakah Saya Boleh Mengekalkan Jejak Tindanan Apabila Melemparkan Semula InnerExceptions dalam C#?

DDD
DDDasal
2025-01-17 07:17:09811semak imbas

How Can I Preserve Stack Traces When Rethrowing InnerExceptions in C#?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn