Hat jemand versucht, Kontexte zu stapeln und Aufgaben gleichzeitig zu verwenden?Konflikt zwischen ThreadContext und Aufgabe von Log4Net
Ich versuche, etwas wie folgt aus:
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());
}
und ich bin immer dieses Ergebnis:
2015/42/26 13:42:10,841 INFO [Saving Data] Starting transaction
2015/42/26 13:42:10,870 INFO [(null)] Inside Transaction
ich es erwartet hatte zu haben [Speichern von Daten] statt [ (null)] in der zweiten Zeile.
Es scheint den Zugriff auf den log4net ThreadContext Stack zu verlieren, sobald eine neue Task gestartet wird.
Wissen Sie, wie Sie das vermeiden können?
EDIT: Zunächst dachte ich, es war ein Problem mit Transaction Scope, aber wie @stuartd zeigte mir, es war in Ordnung. Dann wurde mir klar, dass es eine Aufgabe gab und das war das eigentliche Problem.
sichtbar sein kann reproduzieren Sie das nicht - https://gist.github.com/stuartd/81c8754391aa1a580da0 - können Sie dies mit mehr Code aktualisieren, damit es reproduzierbar ist? – stuartd
@stuartd du hast Recht. Ich habe die Frage so geändert, dass sie das tatsächliche Problem widerspiegelt: System.Threading.Tasks. –