在c#中实现异步操作的超时操作
>有效地管理异步操作通常需要合并超时机制以防止无限期阻塞。 本文演示了如何在指定的超时期使用>。
Task.await
CancellationTokenSource
类提供了控制取消异步任务的机制。 通过创建一个
CancellationTokenSource
>示例代码:CancellationTokenSource
以下C#代码片段说明了处理超时的使用:
此改进的代码段显式处理潜在的空值,并确保从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>的任务或超时到期。 如果发生超时,
被调用以清洁异步操作,并抛出aGetFinalUrl
。 改进错误处理以提供更具体的异常消息。 请记住适应Task.WhenAny
以正确处理DoWorkAsync
。
以上是如何在超时后取消 C# 中的 Task.await 操作?的详细内容。更多信息请关注PHP中文网其他相关文章!