首页 > 后端开发 > C++ > 如何在超时后取消 C# 中的 Task.await 操作?

如何在超时后取消 C# 中的 Task.await 操作?

Linda Hamilton
发布: 2025-01-27 22:13:10
原创
423 人浏览过

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

在c#中实现异步操作的超时操作

>有效地管理异步操作通常需要合并超时机制以防止无限期阻塞。 本文演示了如何在指定的超时期使用

>。 Task.awaitCancellationTokenSource类提供了控制取消异步任务的机制。 通过创建一个

并将其令牌传递给任务,您可以在需要时触发取消。

CancellationTokenSource>示例代码:CancellationTokenSource

以下C#代码片段说明了处理超时的使用:

此改进的代码段显式处理潜在的空值,并确保从CancellationTokenSource返回字符串。 使用

优雅地等待完成
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) ...
}
登录后复制
的任务或超时到期。 如果发生超时,

被调用以清洁异步操作,并抛出aGetFinalUrl。 改进错误处理以提供更具体的异常消息。 请记住适应Task.WhenAny以正确处理DoWorkAsync

以上是如何在超时后取消 C# 中的 Task.await 操作?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板