【发布时间】:2018-07-04 17:24:22
【问题描述】:
我有以下代码
public async Task<T> SendData<T>()
{
T result = default(T);
using (var client = new HttpClient())
{
using (var formData = new MultipartFormDataContent())
{
try
{
foreach (var p in ParametresToSend)
formData.Add(p.Value, p.Key);
HttpResponseMessage response = await client.PostAsync(URL, formData);
string stringContent = await response.Content.ReadAsStringAsync();
result = JsonConvert.DeserializeObject<T>(stringContent);
}
catch (Exception ex)
{
throw ex;
}
finally
{
ParametresToSend.Clear();
}
}
}
return result;
}
它工作得很好,但是如果在检查它的可用性后互联网不可用(很短的时间,但有可能),它会捕获 first HttpRequestException。在此之后,立即将抛出 second HttpRequestException,但 catch 块没有捕获它并且应用程序崩溃。为什么会幸福?
【问题讨论】:
-
好吧,在您的
catch中,您正在重新抛出异常(即使那是您想要的,但您不应该使用普通的throw;) -
... 或者删除
catch块,因为它在这里没有任何作用(除了 - DavidG 的观点 - 破坏当前写入的堆栈跟踪) -
@DavidG,你说得对,但我已经尝试了一切,在所有情况下我仍然有第二个例外。
-
是的,您有第二个异常,因为您再次抛出异常!你觉得
throw是做什么的? -
@Riko3412 您是否在 VS 的输出窗口中观察到这些?因为这可能会给您一种印象,即它正在重新触发并且没有被处理(如果您说它在没有捕获的情况下表现相同)。我已经尝试过您的代码,但无法重现。
标签: c# exception try-catch httpclient