现在 .NET Core 中有一个选项可能会给您带来更好的结果,至少在我的情况下,经过的时间比使用@ollifant建议的方法低 10-40% 左右。我会坚持他的建议,但将秒表移至处理程序。
您可以使用DelegatingHandler,例如.NET Core Docs。
您仍然可以按照上面的建议使用 Stopwatch,但可以在处理程序本身中使用。我将经过的时间添加到我检索的 Header 中,然后在您的 _GetHttpWithTimingInfo 中进行进一步处理。很可能您可以 DI 一些服务并将持续时间从处理程序本身保存到数据库中,这取决于您的项目。
也许,这个解决方案也可以解决@Dmytro Bogatov提到的问题。
此外,此方法直接用于.NET Core HTTP 日志记录检查SendAsync。请注意,他们使用的是内部 ValueStopwatch 而不是秒表。
这些日志显示在处理程序中使用秒表与直接在方法中:
08-11-2020 18:05:52.024 [INF] Handler: 992, _GetHttpWithTimingInfo 995
08-11-2020 18:05:52.153 [INF] Handler: 663, _GetHttpWithTimingInfo 1249
08-11-2020 18:05:52.208 [INF] Handler: 999, _GetHttpWithTimingInfo 1220
08-11-2020 18:05:52.219 [INF] Handler: 1002, _GetHttpWithTimingInfo 1241
08-11-2020 18:05:52.219 [INF] Handler: 989, _GetHttpWithTimingInfo 1217
08-11-2020 18:05:52.255 [INF] Handler: 609, _GetHttpWithTimingInfo 1302
08-11-2020 18:05:52.260 [INF] Handler: 959, _GetHttpWithTimingInfo 1267
08-11-2020 18:05:52.287 [INF] Handler: 1063, _GetHttpWithTimingInfo 1303
08-11-2020 18:05:52.292 [INF] Handler: 515, _GetHttpWithTimingInfo 1381
08-11-2020 18:05:52.296 [INF] Handler: 992, _GetHttpWithTimingInfo 1286
08-11-2020 18:05:52.321 [INF] Handler: 953, _GetHttpWithTimingInfo 1323
08-11-2020 18:05:52.324 [INF] Handler: 973, _GetHttpWithTimingInfo 1304
08-11-2020 18:05:52.326 [INF] Handler: 985, _GetHttpWithTimingInfo 1302