在我的后端 Web 服务中,指标会在多个时刻发送以跟踪其行为。为了发送一个指标,我做了一个 http 调用。我担心等待它会给服务的响应增加无用的延迟。对我来说,似乎他们应该火了就忘记了。不等待这些电话是否安全和/或建议?
注意:我的服务是 c#,dotnet core。
PS:调用失败可以由度量包本身记录。指标调用失败不应中断用户调用。
在我的后端 Web 服务中,指标会在多个时刻发送以跟踪其行为。为了发送一个指标,我做了一个 http 调用。我担心等待它会给服务的响应增加无用的延迟。对我来说,似乎他们应该火了就忘记了。不等待这些电话是否安全和/或建议?
注意:我的服务是 c#,dotnet core。
PS:调用失败可以由度量包本身记录。指标调用失败不应中断用户调用。
如果您不需要它,为什么要等待。但要小心错误。
以下是一些有助于解决错误的扩展
public static void RunAndForget(this Task task, Action<Exception> onError)
{
task.ContinueWith(t => { onError?.Invoke(t.Exception); }, TaskContinuationOptions.OnlyOnFaulted);
}
//the Logging.LogException is a static Action so you can set it once
public static void RunAndForget(this Task task)
{
task.ContinueWith(t => { Logging.LogException(t.Exception); }, TaskContinuationOptions.OnlyOnFaulted);
}
触发和忘记调用是否安全取决于度量库的实现以及可能的错误处理(例如日志记录)。被遗忘的任务可以在其父 HTTP 请求上下文被释放后继续执行,如果任务尝试使用已释放的资源,它可能会崩溃。
您是否会遇到问题取决于特定组件以及它们的配置方式,例如,如果任务的依赖项依赖垃圾收集器进行清理,那么您就可以了。但是,如果 ASP.NET DI 容器调用Dispose()
任务的依赖项,则该依赖项可以开始抛出InvalidOperationException
.