Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Membatalkan Task.Wait() Selepas Tamat Masa dalam C#?

Bagaimana untuk Membatalkan Task.Wait() Selepas Tamat Masa dalam C#?

Mary-Kate Olsen
Lepaskan: 2025-01-27 22:16:13
asal
655 orang telah melayarinya

How to Cancel a Task.Wait() After a Timeout in C#?

kaedah membatalkan tugas.wait () dalam C#

Dalam kod ini,

mulakan pada thread baru dengan pam mesej dan lakukan tugas

pada benang. Kemudian tunggu tugas pada benang utama untuk menyekat benang utama sehingga tugas selesai. MessageLoopWorker.Run DoWorkAsync Untuk membatalkan tugas demi masa, anda boleh menggunakan kelas

. Kelas

membolehkan anda membatalkan permintaan dari satu thread ke yang lain. CancellationToken CancellationToken Berikut adalah kaedah mengubah kod untuk membatalkan tugas selepas lebih masa:

Dalam kod ini, kami membuat
private Uri GetFinalUrl(PortalMerchant portalMerchant)
{
    SetBrowserFeatureControl();
    Uri finalUri = null;
    if (string.IsNullOrEmpty(portalMerchant.Url))
    {
        return null;
    }
    Uri trackingUrl = new Uri(portalMerchant.Url);

    // 创建一个 CancellationTokenSource。
    using (CancellationTokenSource cancellationTokenSource = new CancellationTokenSource())
    {
        // 设置 5 秒的超时时间。
        using (Timer timer = new Timer(state => cancellationTokenSource.Cancel(), null, 5000, Timeout.Infinite))
        {
            try
            {
                // 使用 CancellationToken 启动任务。
                var task = MessageLoopWorker.Run(DoWorkAsync, cancellationTokenSource.Token, trackingUrl);

                // 等待任务完成。
                task.Wait(cancellationTokenSource.Token);

                // 如果任务成功完成,获取结果。
                if (!string.IsNullOrEmpty(task.Result?.ToString()))
                {
                    return new Uri(task.Result.ToString());
                }
            }
            catch (OperationCanceledException)
            {
                // 任务被取消。
            }
            catch (AggregateException ex)
            {
                // 处理任务中的其他异常
                foreach (var innerException in ex.InnerExceptions)
                {
                    // Log or handle inner exception appropriately
                    Console.WriteLine($"Inner Exception: {innerException.Message}");
                }
            }
        }
    }

    // 如果任务被取消或失败,则返回 null。
    return null;
}
Salin selepas log masuk
dan lulus ke kaedah

. Kami juga menetapkan pemasa untuk membatalkan token selepas 5 saat. Sekiranya tugas itu berjaya diselesaikan sebelum lebih masa, kami akan mendapat hasilnya. Jika tugas dibatalkan, kami akan menangkap CancellationTokenSource. Akhirnya, kami menggunakan kenyataan untuk melepaskan sumber CancellationToken dan MessageLoopWorker.Run untuk memastikan sumber -sumbernya diproses dengan betul. Di samping itu, rawatan OperationCanceledException ditambah untuk menangkap dan mengendalikan keabnormalan lain yang mungkin berlaku dalam misi using. CancellationTokenSource Timer versi yang lebih baik menggunakan AggregateException pernyataan untuk pengurusan sumber yang betul, mencegah kebocoran sumber

Atas ialah kandungan terperinci Bagaimana untuk Membatalkan Task.Wait() Selepas Tamat Masa dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan