3.29异常抑制机制
在发起 HTTP 远程请求时,可能会遇到以下异常情况:
在发起 HTTP 远程请求时,可能会遇到以下异常情况:
- 目标主机不可达
- 请求被取消
- 请求超时
- 其他网络异常
默认情况下,这些异常会中断程序执行。虽然开发者通常使用 try/catch 进行异常处理,但在某些场景下,我们更希望异常发生时静默返回 null 而不中断流程。为此,框架提供了灵活的异常抑制功能。
- 抑制所有请求异常
var httpResponseMessage = httpRemoteService.SendAsync(HttpRequestBuilder.Post("https://furion.net/") .SuppressExceptions()); // 抑制所有异常当请求发生异常时,代码不会中断,而是返回 null,即 httpResponseMessage 的值为 null。
在某些场景下,我们希望在抑制异常的同时,仍能捕获异常信息(例如记录到日志中),而不中断程序的正常执行。此时,可以通过 SetOnRequestFailed 回调来实现:
HttpRequestBuilder.Post("https://furion.net/") .SuppressExceptions() .SetOnRequestFailed((exception, responseMessage) => // 注意:responseMessage 可能为空 { Console.WriteLine(exception.Message); });该方法允许你在异常被抑制后,安全地处理错误信息,适用于日志记录、监控或其他错误响应逻辑。
- 仅抑制特定类型的异常
框架还支持仅抑制特定类型的异常。例如,可以仅抑制超时异常和请求取消异常:
var httpResponseMessage = httpRemoteService.SendAsync(HttpRequestBuilder.Post("https://furion.net/") .SuppressExceptions([typeof(TimeoutException), typeof(TaskCanceledException)])); // 抑制超时和取消异常- 禁用异常抑制配置
若需恢复默认行为(即异常发生时中断程序),可显式禁用异常抑制:
var httpResponseMessage = httpRemoteService.SendAsync(HttpRequestBuilder.Post("https://furion.net/") .SuppressExceptions(false); // 恢复缺省配置此配置等效于未调用 SuppressExceptions(),当发生任何异常时,程序将中断执行。