3.29异常抑制机制

在发起 HTTP 远程请求时,可能会遇到以下异常情况:

在发起 HTTP 远程请求时,可能会遇到以下异常情况:

  • 目标主机不可达
  • 请求被取消
  • 请求超时
  • 其他网络异常

默认情况下,这些异常会中断程序执行。虽然开发者通常使用 try/catch 进行异常处理,但在某些场景下,我们更希望异常发生时静默返回 null 而不中断流程。为此,框架提供了灵活的异常抑制功能。

  • 抑制所有请求异常
cs
var httpResponseMessage = httpRemoteService.SendAsync(HttpRequestBuilder.Post("https://furion.net/")    .SuppressExceptions());  // 抑制所有异常

当请求发生异常时,代码不会中断,而是返回 null,即 httpResponseMessage 的值为 null

在某些场景下,我们希望在抑制异常的同时,仍能捕获异常信息(例如记录到日志中),而不中断程序的正常执行。此时,可以通过 SetOnRequestFailed 回调来实现:

cs
HttpRequestBuilder.Post("https://furion.net/")    .SuppressExceptions()    .SetOnRequestFailed((exception, responseMessage) =>     // 注意:responseMessage 可能为空    {        Console.WriteLine(exception.Message);    });

该方法允许你在异常被抑制后,安全地处理错误信息,适用于日志记录、监控或其他错误响应逻辑。

  • 仅抑制特定类型的异常

框架还支持仅抑制特定类型的异常。例如,可以仅抑制超时异常和请求取消异常:

cs
var httpResponseMessage = httpRemoteService.SendAsync(HttpRequestBuilder.Post("https://furion.net/")    .SuppressExceptions([typeof(TimeoutException), typeof(TaskCanceledException)]));  // 抑制超时和取消异常
  • 禁用异常抑制配置

若需恢复默认行为(即异常发生时中断程序),可显式禁用异常抑制:

cs
var httpResponseMessage = httpRemoteService.SendAsync(HttpRequestBuilder.Post("https://furion.net/")    .SuppressExceptions(false);  // 恢复缺省配置

此配置等效于未调用 SuppressExceptions(),当发生任何异常时,程序将中断执行。