Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk membatalkan Operasi Tugas.

Bagaimana untuk membatalkan Operasi Tugas.

Linda Hamilton
Linda Hamiltonasal
2025-01-27 22:13:10420semak imbas

How to Cancel a Task.await Operation in C# After a Timeout?

Melaksanakan waktu tamat untuk operasi tak segerak dalam C#

Menguruskan operasi asynchronous secara berkesan sering memerlukan menggabungkan mekanisme masa untuk mencegah penyekatan tidak terbatas. Artikel ini menunjukkan cara membatalkan operasi

di C# selepas tempoh masa yang ditentukan menggunakan Task.await. CancellationTokenSource

Kelas

menyediakan mekanisme untuk mengawal pembatalan tugas tak segerak. Dengan membuat CancellationTokenSource dan lulus tokennya ke tugas, anda boleh mencetuskan pembatalan apabila diperlukan. CancellationTokenSource

Contoh Kod:

coretan kod C# berikut menggambarkan penggunaan

untuk mengendalikan masa: CancellationTokenSource

<code class="language-csharp">private static async Task<string> GetFinalUrl(PortalMerchant portalMerchant)
{
    // ... (Existing code for setting browser features and URL validation) ...

    Uri trackingUrl = new Uri(portalMerchant.Url);
    var cts = new CancellationTokenSource();
    var task = MessageLoopWorker.Run(DoWorkAsync, trackingUrl, cts.Token);

    // Use Task.WhenAny to monitor for task completion or timeout
    if (await Task.WhenAny(task, Task.Delay(5000, cts.Token)) == task)
    {
        // Task completed within the timeout
        if (!String.IsNullOrEmpty(task.Result?.ToString()))
        {
            return new Uri(task.Result.ToString()).ToString(); // Ensure string return
        }
        else
        {
            throw new Exception("Parsing Failed");
        }
    }
    else
    {
        // Timeout occurred
        cts.Cancel(); // Explicitly cancel the task
        throw new TimeoutException();
    }
}

static async Task<object> DoWorkAsync(object[] args)
{
    // ... (Existing code for web browser interaction) ...
}</code>
Coretan kod yang lebih baik ini secara eksplisit mengendalikan nilai null yang berpotensi dan memastikan rentetan dikembalikan dari

. Penggunaan GetFinalUrl dengan elegan menunggu sama ada tugas Task.WhenAny untuk menyelesaikan atau tamat masa untuk tamat tempoh. Sekiranya masa tamat berlaku, DoWorkAsync dipanggil untuk membatalkan operasi tak segerak, dan cts.Cancel() dibuang. Pengendalian ralat diperbaiki untuk memberikan mesej pengecualian yang lebih spesifik. Ingatlah untuk menyesuaikan TimeoutException dengan betul mengendalikan MessageLoopWorker.Run. CancellationToken

Atas ialah kandungan terperinci Bagaimana untuk membatalkan Operasi Tugas.. 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