【发布时间】:2023-03-12 02:02:01
【问题描述】:
有没有人尝试过同时堆叠上下文和使用任务?
我正在尝试这样的事情:
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 Stack 的访问权限。
你知道如何避免这种情况吗?
编辑:起初以为是事务范围的问题,但正如@stuartd 指出的那样,它工作正常。然后我意识到有一个任务,这才是真正的问题。
【问题讨论】:
-
无法重现这个 - gist.github.com/stuartd/81c8754391aa1a580da0 - 你能用更多代码更新它以便重现吗?
-
@stuartd 你是对的。我已经更改了问题以反映真正的问题:System.Threading.Tasks。
标签: c# .net multithreading task log4net