0

在我的后端 Web 服务中,指标会在多个时刻发送以跟踪其行为。为了发送一个指标,我做了一个 http 调用。我担心等待它会给服务的响应增加无用的延迟。对我来说,似乎他们应该火了就忘记了。不等待这些电话是否安全和/或建议?

注意:我的服务是 c#,dotnet core。

PS:调用失败可以由度量包本身记录。指标调用失败不应中断用户调用。

4

2 回答 2

1

如果您不需要它,为什么要等待。但要小心错误。

以下是一些有助于解决错误的扩展

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);
}
于 2020-02-07T15:58:53.583 回答
0

触发和忘记调用是否安全取决于度量库的实现以及可能的错误处理(例如日志记录)。被遗忘的任务可以在其父 HTTP 请求上下文被释放后继续执行,如果任务尝试使用已释放的资源,它可能会崩溃。

您是否会遇到问题取决于特定组件以及它们的配置方式,例如,如果任务的依赖项依赖垃圾收集器进行清理,那么您就可以了。但是,如果 ASP.NET DI 容器调用Dispose()任务的依赖项,则该依赖项可以开始抛出InvalidOperationException.

于 2020-02-19T18:20:40.337 回答