Я наткнулся на отличную статью Стивена Клири о ведении журналов и .NET CallContext, и в результате Я решил взять его код и адаптировать его для использования log4net, чтобы попытаться выяснить, нет ли в моем коде чего-то неправильного, что могло вызвать проблему.
Во-первых , я запустил код Стивенса точно так же и получил ожидаемый результат:
Код: Выделить всё
Main 1:
Main 1 A:
Main 2:
Main 2 A:
Main 1 A:
Main 1 B:
Main 2 A:
Main 2 B:
Main 2 B:
Main 2:
Main 1 B:
Main 1:
Код: Выделить всё
internal class Program
{
private static readonly ILog Log = LogManager.GetLogger(typeof(Program));
private const string StackName = "test";
private static void Main(string[] args)
{
XmlConfigurator.Configure();
using (LogicalThreadContext.Stacks[StackName].Push("Main"))
{
Task.WhenAll(SomeWork("1"), SomeWork("2")).Wait();
}
Console.ReadKey();
}
private static async Task SomeWork(string stackName)
{
using (LogicalThreadContext.Stacks[StackName].Push(stackName))
{
Log.Info("");
await MoreWork("A");
await MoreWork("B");
Log.Info("");
}
}
private static async Task MoreWork(string stackName)
{
using (LogicalThreadContext.Stacks[StackName].Push(stackName))
{
Log.Info("");
await Task.Delay(10);
Log.Info("");
}
}
}
Код: Выделить всё
Main 1:
Main 1 A:
Main 1 A 2:
Main 1 A 2 A:
Main 1 A 2 A:
Main 1 B:
Main 1 B:
Main 1 B B:
Main 1 B B:
Main 1 B:
Main 1:
Main 1:
Кто-нибудь еще сталкивались с этим или знаете, почему это может происходить?
Подробнее здесь: https://stackoverflow.com/questions/233 ... s-expected