我在我的 asp.net core 2.2 web api 中记录每个请求。我通过为 Fire and Forget 旋转 Task.Run 方法将日志发布到外部服务器。但它抛出异常并影响主线程。有什么方法可以在 asp.net core web api 中触发并忘记?
谢谢, Subbiah K
我在我的 asp.net core 2.2 web api 中记录每个请求。我通过为 Fire and Forget 旋转 Task.Run 方法将日志发布到外部服务器。但它抛出异常并影响主线程。有什么方法可以在 asp.net core web api 中触发并忘记?
谢谢, Subbiah K
如果您的日志方法是这样的异步方法:
public async Task SendLog(Log mylog)
{
// some async logic.
}
您可以简单地调用它:
SendLog(log).ConfigureAwait(false);
发送过程将继续,不会阻塞您当前的线程。
参考:https ://stackoverflow.com/a/53184241/8676371
但是如果你想异步处理异常,你可以这样做:
SendLog(log).
ContinueWith(t => Console.WriteLine(t.Exception), TaskContinuationOptions.OnlyOnFaulted);
这将允许您处理“主”线程以外的线程上的异常。这意味着您不必“等待”来自原始线程的调用 SendLog();但是,仍然允许您对异常执行某些操作——但前提是发生异常。