gpt4 book ai didi

c# - NLog MappedDiagnosticsLogicalContext 不工作在异步/等待与 ConfigureAwait(false)

转载 作者:太空狗 更新时间:2023-10-29 21:49:00 25 4
gpt4 key购买 nike

我正在使用 NLog 4.3.5 和 .Net framework 4.6.1

当我开始服务器端操作时,我调用:

NLog.MappedDiagnosticsLogicalContext.Set("OperationId", Guid.NewGuid());

这被映射并出现在我的日志文件中。一切都很好……是吗?在查看我的日志文件时,我注意到这个操作 ID 值似乎没有像我预期的那样工作。

例子:

  1. 在线程 19 中,一个操作开始并设置上下文。

  2. 它在所有等待调用上使用 .ConfigureAwait(false)

  3. 它执行一个

    var tasks = items.Select(item => Task.Run( () => { /* do stuff */}
    await Task.WhenAll(tasks).ConfigureAwait(false)
  4. 用于这些任务的线程之一是线程 31(记住这一点以备后用)
  5. 与此同时,在线程 36 中,一个不同的服务器方法被调用并开始一个新的操作。几条日志消息是用它唯一的操作 id 写的
  6. 此操作使用 ConfigureAwait(false) 执行 2 个不同的等待调用
  7. 下一个日志语句发生在线程 31 上。从那时起,它记录为在线程 19 上开始的操作创建的操作 ID!

我没想到会发生这种情况,也不确定它是如何发生的。但是,当我查看我的日志历史记录时,我发现这种事情以前发生过。

我认为逻辑调用上下文应该继续存在。是我对 ConfigureAwait(false) 的使用导致了这种行为吗?这是我唯一能想到的......

最佳答案

找到了我认为的问题所在。 https://github.com/NLog/NLog/issues/934

关于c# - NLog MappedDiagnosticsLogicalContext 不工作在异步/等待与 ConfigureAwait(false),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39040688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com