Maison >développement back-end >C++ >Comment annuler un Task.Wait() après un délai d'attente en C# ?
La méthode d'annulation de tâche.Wait () en C #
Dans ce code,
Démarrez sur un nouveau thread avec une pompe de message et effectuez la tâche sur le thread. Ensuite, attendez que la tâche sur le thread principal bloque le thread principal jusqu'à la fin de la tâche. MessageLoopWorker.Run
DoWorkAsync
Afin d'annuler la tâche après, vous pouvez utiliser la classe
vous permet d'annuler la demande d'un fil à l'autre. CancellationToken
CancellationToken
Ce qui suit est la méthode de modification du code pour annuler la tâche après les heures supplémentaires:
Dans ce code, nous créons un
<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); // 创建一个 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; }</code>et le passons à la méthode
. Nous avons également réglé une minuterie pour annuler le jeton après 5 secondes. Si la tâche est terminée avec succès avant les heures supplémentaires, nous obtiendrons le résultat. Si la tâche est annulée, nous capturerons CancellationTokenSource
. Enfin, nous utilisons des instructions pour libérer les ressources CancellationToken
et MessageLoopWorker.Run
pour nous assurer que les ressources sont correctement traitées. De plus, un traitement OperationCanceledException
est ajouté pour capturer et gérer d'autres anomalies qui peuvent se produire dans la mission using
. CancellationTokenSource
Timer
Cette version améliorée utilise AggregateException
des déclarations pour la gestion des ressources appropriée, empêchant les fuites de ressources.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!