このコードでは、Webブラウザーのプログラマティックメソッドでメソッドが瞬時にあり、URLに移動し、ドキュメントのロード後に最終URLを返します。ドキュメントが5秒以上ロードされているときにタスクを停止し、nullを返すために、タイムアウトタスク方法を使用できます。以下は、変更された後のコードです
この変更されたコードでは、5秒のタイムアウトで(TimeoutCts)を作成します。次に、指定されたタイムアウト内でタスクが完了するのを待つために、メソッドを使用します。タイムアウト中にタスクが完了しない場合、GetFinalUrl
異常がスローされ、GetFinalUrl()
メソッドがnullを返します。 潜在的なnullReferenceExceptionを回避するために、空気チェックを追加するためにに注意してください。
<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>
以上がタイムアウト後に Task.Wait() をキャンセルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。