2015-08-26 19 views
5

Herhangi biri bağlamları birbirinden ayırmaya ve aynı zamanda Görevleri kullanmaya çalıştı mı?Log4Net'in ThreadContext ve Görev arasındaki çakışma

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()); 
} 

ve ben o sonucu alıyorum::

Böyle bir şey çalışıyorum

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

Ben [Verileri Kaydetme] yerine [olmasını bekliyordum (null)] ikinci satırda.

O yeni Görev başlar başlamaz log4net ThreadContext Stack erişimi kaybeder görünmektedir.

Bunu önlemek için nasıl biliyor musunuz?

DÜZENLEME: İlk o düşünce başta İşlem Kapsam bir sorun vardı, ama @stuartd beni belirttiği gibi, gayet iyi çalışıyordu. Sonra bir görev olduğunu anladım ve asıl sorun buydu.

+2

görünür olmalıdır yerine olarak Can Bunu yeniden üretme - https://gist.github.com/stuartd/81c8754391aa1a580da0 - bunu daha fazla kodla güncelleyebilir misiniz, böylece tekrarlanabilir mi? – stuartd

+0

@stuartd Haklısınız. Sorunu gerçek problemi yansıtacak şekilde değiştirdim: System.Threading.Tasks. –

cevap

4
görev ThreadContext yığınında veriler mevcut değildir bu yüzden farklı bir iş parçacığı üzerinde çalışacak

, kullanmak gerektiğini log4net.LogicalThreadContext ki veriler mantıksal yürütme izleyin ve hala Task