自己的通话时长
本文关键字:自己的 | 更新日期: 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;
这有点乱,但如果您在这个中间件中所做的一切都是日志记录,那么您希望它很快,这应该符合要求。