log4net 上下文设置。如何将上下文传播到任务并行库生成的子线程

log4net context setting. how to propogate context to child threads spawn by Task parallel library

我正在使用以下代码设置 log4net 上下文

 public static IDisposable ThreadContextSet(string key, object value)
        {
            //object oldVal = ThreadContext.Properties[key];
            ThreadContext.Properties[key] = value;
            var topMostCleaner = new DispCleaner();
            topMostCleaner.EvDispose += () => {
                // Pop = restore old value
                //ThreadContext.Properties[key] = oldVal;
                ThreadContext.Properties[key] = null;
            };
            return topMostCleaner;
        }

        private class DispCleaner : IDisposable
        {
            public event Action EvDispose;

            public void Dispose()
            {
                if (EvDispose != null)
                {
                    EvDispose();
                }
            }
        }

问题是当我从方法创建子线程时,上下文没有传输到那些线程。

喜欢

public void InitiateTransaction(InitiateTransactionRequest info)
{
..
...
                using (Log4NetExt.ThreadContextSet(StringConstants.Log4NetContextConstants.Ip, this.RequestIp))
                using (Log4NetExt.ThreadContextSet(StringConstants.Log4NetContextConstants.TransactionMsisdn, msisdn))
                using (Log4NetExt.ThreadContextSet(StringConstants.Log4NetContextConstants.TransactionId, transactionId))
                {

                ...
                ....

                Task.Factory.StartNew(() => ProcessTransactionAync()); // context not transfer
                }

}

任何人都可以帮助我吗

我已将代码从 ThreadContext.Properties 更改为逻辑 ThreadContext.Properties 看起来它正在工作

解决方案参考 link 是