是否有人试图同时堆叠上下文和使用任务?
我正在尝试这样做:
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堆栈的访问权。
你知道如何避免这种情况吗?
编辑:起初我认为这是事务范围的问题,但正如@stuart指出的那样,它工作得很好。然后我意识到有一个任务,这才是真正的问题。
该任务将在不同的线程上运行,因此ThreadContext
堆栈中的数据不可用,您应该使用log4net.LogicalThreadContext
作为数据,该数据应该遵循逻辑执行,并且仍然对Task
可见