您好,我正在使用与此类似的 HttpClient:
public static Task<string> AsyncStringRequest(string url, string contentType)
{
try
{
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(contentType));
return client.GetStringAsync(url).ContinueWith(task => {
return task.Result;
});
}
catch (AggregateException ex)
{
throw ex;
}
catch (WebException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
}
但我在处理异常时遇到困难。我添加了额外的 catch 块只是为了尝试一步抛出,但没有任何断点被任何 catch 块捕获。我意识到使用 Task 异常可能发生在与调用者不同的线程上,因此异常被包装在聚合容器中,但我不确定处理这些异常的最佳方法是什么。
例如,我向 Web 服务发出请求,并在请求中指定了无效参数,然后抛出异常。我希望能够捕获聚合异常并查看内部异常以找出请求失败的原因并返回一条友好的消息。
所以我的问题是,捕获这些聚合异常并处理它们的最佳方法是什么?
异常是由task.Result http://msdn.microsoft.com/en-us/library/dd321468:
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(...);
return client.GetStringAsync(url).ContinueWith(task =>
{
try
{
return task.Result;
}
catch (AggregateException ex)
{
throw ex;
}
catch (WebException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
});
更好:检查任务是否faulted http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.isfaulted访问之前task.Result http://msdn.microsoft.com/en-us/library/dd321468:
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(...);
return client.GetStringAsync(url).ContinueWith(task =>
{
if (task.IsFaulted)
{
var ex = task.Exception;
}
else if (task.IsCancelled)
{
}
else
{
return task.Result;
}
});
如果你实际上并没有在做某事ContinueWith http://msdn.microsoft.com/en-us/library/dd321326,你可以简单地省略它:
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(...);
return client.GetStringAsync(url);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)