Tag: aggregateexception

HttpClient – 处理聚合exception

嗨我正在使用类似这样的HttpClient: public static Task 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; } } 但我在处理exception时遇到困难。 我添加了额外的catch块只是为了尝试并逐步抛出,但没有任何断点被捕获到任何catch块中。 我意识到使用Task,exception可能发生在与调用者不同的线程上,因此exception包含在聚合容器中,但我不确定处理这些exception的最佳方法是什么。 例如,我向Web服务发出请求,并在请求中指定了特定的无效参数,并抛出exception。 我希望我能够捕获聚合exception,并查看innerexceptions以找出请求失败的原因并返回友好消息。 所以我的问题是,捕获这些聚合exception并处理它们的最佳方法是什么?

展平处理的AggregateExceptions

我遇到了一些我在AggregateException上调用flatten问题,但是里面仍然存在另一个AggregateException ! 这显然意味着它们正在链中传播并被转换为另一个AggregateException 。 有没有办法递归展平所有内部AggregateExceptions? 通常,我将使用handle delegate来处理这些,但如果有另一个内部AggregateExceeption则返回false。 我没有正确处理这些问题吗? 编辑:因为我已经在调用Flatten,所以看起来问题是它直到稍后在callstack中被捕获。 这是我正在调用Flatten()的代码。 要在堆栈跟踪中使用,此方法称为WriteExceptionRecord(string,FileInfo): do { try { using (var stream = file.Open(FileMode.Append, FileAccess.Write, FileShare.None)) { using (StreamWriter writer = new StreamWriter(stream)) { await writer.WriteLineAsync(data); } } } catch (AggregateException ex) { ex.Flatten().Handle((x) => { if (x is IOException) { retryNeeded = true; retryLeft–; Thread.Sleep(500); return true; } […]