Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Membatalkan Tugas.Tunggu() Selepas Tamat Masa?
Kendalikan tamat masa tugas tak segerak dengan anggun: batalkan Tugas.Tunggu() dalam masa 5 saat
Kaedah GetFinalUrl
dalam kod ini memprogramkan penyemak imbas web secara langsung, menavigasi ke URL dan mengembalikan URL akhir selepas dokumen selesai dimuatkan. Untuk menghentikan tugas apabila dokumen dimuatkan selama lebih daripada 5 saat dan menjadikan GetFinalUrl()
kembali batal, anda boleh menggunakan kaedah tugas tamat masa. Berikut ialah kod yang diubah suai:
<code class="language-csharp">private Uri GetFinalUrl(PortalMerchant portalMerchant) { SetBrowserFeatureControl(); Uri finalUri = null; if (string.IsNullOrEmpty(portalMerchant.Url)) { return null; } Uri trackingUrl = new Uri(portalMerchant.Url); // 创建一个超时取消令牌源 using (var timeoutCts = new CancellationTokenSource(TimeSpan.FromSeconds(5))) { var task = MessageLoopWorker.Run(DoWorkAsync, trackingUrl, timeoutCts.Token); try { // 在超时时间内等待任务完成 task.Wait(timeoutCts.Token); if (!String.IsNullOrEmpty(task.Result?.ToString())) { return new Uri(task.Result.ToString()); } } catch (OperationCanceledException) { // 任务超时,返回null return null; } } throw new Exception("解析失败"); }</code>
Dalam kod yang diubah suai ini, CancellationTokenSource(TimeSpan)
(timeoutCts) dengan tamat masa 5 saat dibuat menggunakan pembina CancellationTokenSource
. Kemudian gunakan kaedah Wait(CancellationToken)
untuk menunggu tugasan selesai dalam tempoh tamat masa yang ditentukan oleh CancellationToken
. Jika tugasan tidak selesai dalam tempoh tamat masa, pengecualian OperationCanceledException
dilemparkan dan kaedah GetFinalUrl
mengembalikan nol. Perhatikan semakan nol tambahan untuk task.Result
untuk mengelakkan potensi NullReferenceException.
Dengan cara ini, kami secara berkesan mengelakkan sekatan yang lama dan menangani kemungkinan situasi tamat masa dengan baik.
Atas ialah kandungan terperinci Bagaimana untuk Membatalkan Tugas.Tunggu() Selepas Tamat Masa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!