以下是使用System.Net.Http.HttpClient
try
{
var responseResult = new System.Net.Http.HttpClient().GetAsync(fileUrl);
using (var memStream = responseResult.Result.Content.ReadAsStreamAsync().Result)
{
using (var fileStream = File.Create(saveToPath))
{
memStream.CopyTo(fileStream);
}
}
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
}
有时我会调用此文件,但文件无法下载。在这种情况下,会调用catch,但不包含该问题的任何信息:
One or more errors occurred.
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at System.Threading.Tasks.Task`1.get_Result()
at SpPrefetchIndexBuilder.FileDownloader.StartDownloads(Int32 timeout)
如何才能解决此异常的原因?
答案 0 :(得分:3)
Task.Result
抛出AggregateException
,所以你可以抓住它。所有异常都将在该异常的InnerExceptions
属性内(理论上可以有多个,但在您的情况下只有一个)。第一个例外(或者只有一个例外)也在InnerException
属性中。
如果您不想在AggregateException
内挖掘,请使用.GetAwaiter().GetResult()
代替.Result
- 这不会将异常包装到AggregateException
中并将其作为是
答案 1 :(得分:1)
由于您在任务上调用.Result
,原始异常将保存在catched异常的InnerException
属性中。您可以使用以下构造访问它:
string message = e?.InnerException.Message ?? e.Message;
答案 2 :(得分:0)
不确定是否适用,但是您是否尝试过?:Console.WriteLine(ex.GetBaseException()。ToString()。StackTrace)