我有ActionFilterAttribute
与此相似。
public override async Task OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)
{
await Task.Delay(3*1000);
}
在Task.Delay
的位置,假设我有一个异步日志服务调用,它有一些延迟。
我的问题是我还没有找到任何办法让日志记录不阻止请求 - 响应过程。所以这个Task.Delay
会阻止刷新的响应。我想避免这种情况,以便在响应时间方面保持良好的用户体验。
这样做的正确方法是什么?
答案 0 :(得分:0)
使用新任务解雇它以使其保持在单独的线程上。
Task.Run(() => logger.Debug("This is a log entry"));
大多数日志框架已经有了你可以使用的异步方法。如果它们得到正确实施,您将不会添加任何额外的延迟。请记住,这将使用fire记录并忘记(无反馈),并且您将无法控制日志事件的顺序,因为它们不会按顺序写入。
但是,执行此操作的首选方法是编写异步日志追加程序,而不是在开发人员可能容易遗漏的某些OWIN中间件中执行此操作。