繁体   English   中英

Task.Wait(超时)和异常

[英]Task.Wait(timeout) and exceptions

假设我有以下代码,该代码在给定HttpWebRequest的情况下返回HttpWebResponse:

HttpWebRequest request = ...; 
Task<WebResponse> task = Task<WebResponse>.Factory
                                          .FromAsync(
                                                request.BeginGetResponse
                                              , request.EndGetResponse
                                              , null
                                              , TaskCreationOptions.None
                                          );
if (task.Wait(TimeSpan.FromSeconds(200)))
{
    // Ok, request completed, return the response
    return task.Result;
}
else
{
    throw new WebException("GetResponse timed out", new TimeoutException());
    // is it possible that we end with an unobserved exception? I.e., 
    // what if BeginGetResponse/EndGetResponse throws
    // immediately after task.Wait has returned false?
}

如果在任务超时并返回false之后Web请求立即失败,该怎么办? 任务是否将其终结器运行时将其视为“不可观察的”异常?

请注意,此代码的调用者已准备好处理任务完成之前可能引发的任何异常。

是的,该错误是无法观察到的。 您曾经等待的事实并没有向TPL表示您已观察到错误。

附加一个将在所有情况下都观察到错误的继续。

task.ContinueWith(t =>     
{
    var dummy = t.Exception;
},  TaskContinuationOptions.OnlyOnFaulted 
  | TaskContinuationOptions.ExecuteSynchronously);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM