【发布时间】:2021-12-21 05:09:07
【问题描述】:
我有类似这样的调用结构:
程序 -calls-> Service1.Function1 -calls-> Service2.Function2 -calls-> HTTP 调用
最后有一个 HTTP 调用,所以我所有的调用都是通过 async/await 进行的。
这是一个例子:
async function1()
{
logger.Info("START Function1 with parameters xy");
logger.Info("CALL Function2 with parameters xy");
await Service2.Function2();
logger.Info("RET Function2 with parameters xy");
logger.Info("END Function1 with parameters xy");
}
async function2()
{
logger.Info("START Function1 with parameters xy");
await HTTPClient.Call();
logger.Info("END Function1 with parameters xy");
}
使用 NLog 我得到这个日志
2021-11-04 14:44:12.6996|INFO |Service1.Function1 : START Function1 with Parameters: xy
2021-11-04 14:44:12.6996|INFO |Service1.Function1 : CALL Function2 with Parameters: xy
2021-11-04 14:44:12.6996|INFO |Service2.Function2 : START Function2 with Parameters: xy
2021-11-04 14:44:17.7004|ERROR|Service2.Function2 : A task was canceled.
如果您查看时间戳,它会始终显示完全相同的时间戳,直到发出等待的 HTTP 调用。我认为这与异步(async/await)结构有关。如何启用“真实”时间戳?
【问题讨论】:
-
预期/期望的输出是什么?
-
你能添加一些最小的代码来重现这个吗?我们看不到 START、CALL、START 等记录的位置
-
感谢您的回答。我在上面添加了示例代码。预期的行为是,时间戳应该不同,还是我错了?我认为日志消息不能同时写在 exakt 中。正如您在最后一行中看到的,呼叫被取消,因为它花费了超过 5 秒的时间。我想调查一下我在哪些职能部门浪费了这么多时间。
标签: c# asynchronous nlog