自己的通话时长

本文关键字:自己的 | 更新日期: 2023-09-27 18:01:37

是否有简单的方法在c#中找到调用持续时间?

我使用Owin中间件来拦截对API的调用并记录有关它们的信息,我想记录的部分内容是调用的持续时间。

public override async Task Invoke(IOwinContext context)
{
   var request = context.Request;
   var response = context.Response;
   var userName = request.User != null && request.User.Identity.IsAuthenticated ? request.User.Identity.Name : "No username";
   var entity = new TrackingEntity()
   {
      UserName = userName
   };
   // invoke the next middleware in the pipeline
   await Next.Invoke(context);
   WriteRequestHeaders(request, entity);
   WriteResponseHeaders(response, entity);
   await storage.InsertEntity(entity);
}

如果我的跟踪实体上有一个Duration字段用于存储呼叫的时间长度,那么记录它的最佳方法是什么?

public TimeSpan Duration { get; set; }

最准确的方法是使用定时器,开始之前调用next和结束后?

我想我只是想多了。

提前感谢。

自己的通话时长

我认为你不需要创建计时器的开销,只需将开始时间记录到一个变量中,然后将结束时间记录在另一个变量中以设置持续时间。

var startTime = DateTime.Now;
await Next.Invoke(context);
var endTime = DateTime.Now;
Duration = endTime - startTime;

这有点乱,但如果您在这个中间件中所做的一切都是日志记录,那么您希望它很快,这应该符合要求。