Task.Wait(超时)和异常
本文关键字:异常 超时 Wait Task | 更新日期: 2023-09-27 18:16:46
假设我有以下代码,返回给定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?
}
如果web请求在任务超时后立即失败并返回false会发生什么?任务是否认为它是一个"未观察到的"异常,当它的终结器运行时将被抛出?
请注意,此代码的调用者准备处理在任务完成之前可能抛出的任何异常。
是,错误未被发现。您曾经等待过的事实并不向TPL表明您观察到了错误。
附加一个将在所有情况下观察错误的延续。
task.ContinueWith(t =>
{
var dummy = t.Exception;
}, TaskContinuationOptions.OnlyOnFaulted
| TaskContinuationOptions.ExecuteSynchronously);