Rumah >pembangunan bahagian belakang >C++ >Bagaimana Berkesan Mengendalikan Pengecualian dalam Tugasan Async C#?

Bagaimana Berkesan Mengendalikan Pengecualian dalam Tugasan Async C#?

Linda Hamilton
Linda Hamiltonasal
2024-12-29 14:30:11800semak imbas

How to Effectively Handle Exceptions in C# Async Tasks?

Teknik Pengendalian Pengecualian dalam Tugasan

Dalam bidang pengaturcaraan tak segerak, System.Threading.Tasks.Task rangka kerja menyediakan mekanisme untuk mengurus tugas dan kemungkinan pengecualiannya. C# menawarkan pelbagai pendekatan untuk mengendalikan pengecualian sedemikian dengan berkesan.

Pilihan 1: Async dan Await (C# 5.0 dan ke atas)

Dengan kemunculan C# 5.0, async dan kata kunci tunggu menyediakan kaedah yang lebih bersih dan diperkemas untuk pengendalian pengecualian. Anda boleh memintas ContinueWith dan menulis kod anda secara berurutan, menggunakan blok try/catch untuk menangkap pengecualian, seperti yang digambarkan di bawah:

try
{
    await task;
}
catch (Exception e)
{
    // Handle exceptions
}

Pilihan 2: ContinueWith Overload (C# 4.0 dan ke bawah)

Dalam versi C# yang lebih awal, anda boleh menggunakan pendekatan alternatif menggunakan lebihan ContinueWith yang menerima parameter jenis TaskContinuationOptions. Ini membolehkan kawalan terperinci ke atas kesinambungan yang harus dilaksanakan berdasarkan keadaan tugas anteseden. Untuk mengendalikan pengecualian secara khusus, gunakan pilihan OnlyOnFaulted:

task.ContinueWith(t => { /* Handle exceptions */ }, context, TaskContinuationOptions.OnlyOnFaulted);

Contoh Pelaksanaan

Dalam contoh yang anda berikan, anda boleh mempertimbangkan untuk menstruktur semula kod menggunakan ContinueWith seperti berikut:

public class ChildClass : BaseClass
{
    public void DoItInAThread()
    {
        var context = TaskScheduler.FromCurrentSynchronizationContext();
        Task.Factory.StartNew<StateObject>(() => this.Action())
                    .ContinueWith(e => this.ContinuedAction(e), context)
                    .ContinueWith(t => HandleExceptions(t), context, TaskContinuationOptions.OnlyOnFaulted);
    }

    private void ContinuedAction(Task<StateObject> e)
    {
        if (e.IsFaulted)
        {
            return; // Skip execution if faulted
        }

        // Perform action with e.Result
    }

    private void HandleExceptions(Task task)
    {
        // Display error window and log the error
    }
}

Dengan memanfaatkan teknik ini, anda boleh memastikan pengendalian pengecualian dalam operasi Tugas anda, mengekalkan asas kod yang bersih dan berstruktur.

Atas ialah kandungan terperinci Bagaimana Berkesan Mengendalikan Pengecualian dalam Tugasan Async 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