gpt4 book ai didi

c# - Log4Net 的 ThreadContext 和 Task 之间的冲突

转载 作者:太空狗 更新时间:2023-10-29 23:21:35 27 4
gpt4 key购买 nike

有没有人试过同时堆叠context和使用Tasks?

我正在尝试这样的事情:

using (log4net.ThreadContext.Stacks["contextLog"].Push("Saving Data"))
{
log.Info("Starting transaction");
var taskList = new List<Task>();
taskList.Add(Task.Factory.StartNew(() =>
{
log.Info("Inside Transaction");
}));
Task.WaitAll(taskList.ToArray());
}

我得到了这个结果:

2015/42/26 13:42:10,841 INFO  [Saving Data] Starting transaction
2015/42/26 13:42:10,870 INFO [(null)] Inside Transaction

我原以为它在第二行有 [Saving Data] 而不是 [(null)]

它似乎在启动新任务后立即失去对 log4net ThreadContext 堆栈的访问权限。

你知道如何避免这种情况吗?

编辑:起初我认为是事务范围的问题,但正如@stuartd 指出的那样,它工作正常。然后我意识到有一个任务,这才是真正的问题。

最佳答案

任务将在不同的线程上运行,因此 ThreadContext 堆栈中的数据不可用,您应该使用 log4net.LogicalThreadContext 作为数据遵循逻辑执行并且仍然对 Task

可见

关于c# - Log4Net 的 ThreadContext 和 Task 之间的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32233419/

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