[
https://issues.apache.org/jira/browse/LOG4NET-562?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15958808#comment-15958808
]
Husain Alshehhi commented on LOG4NET-562:
-----------------------------------------
[~nachbarslumpi] Correct. The value can travel from one thread to another, but
it should not travel to any thread arbitrarily.
When I configure a particular thread context to be a certain value, that should
not affect its neighbor threads. It should only affect its children threads. In
the example I gave, I changes the main thread context, which should carry on to
all child threads, and when I change a particular child thread context, that
should not affect any other children's context.
I started to see this problem when I use Parrallel API. I am suprised that when
I use Task API with WaitAll, the code outputs as expected.
> LogicalThreadContext is not per Thread
> --------------------------------------
>
> Key: LOG4NET-562
> URL: https://issues.apache.org/jira/browse/LOG4NET-562
> Project: Log4net
> Issue Type: Bug
> Components: Other
> Affects Versions: 2.0.8
> Environment: Windows 10, Visual Studio 17, .NET Framework 4.5.2
> Reporter: Husain Alshehhi
>
> LogicalThreadContext values are spread to many threads when they shouldn't.
> This is an example:
> {code:title=console.cs|borderStyle=solid}
> LogicalThreadContext.Properties["x-corralation-Id"] =
> "original-value";
> var list = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
> Parallel.ForEach(list, (i) =>
> {
> if (i == 3)
> LogicalThreadContext.Properties["x-corralation-Id"] =
> "modified-value";
> logger.Info($"thread {i}.");
> });
> {code}
> this is the result
> {code:title=badresult.txt|borderStyle=solid}
> {"timestamp":"2017-04-05T12:31:41.117Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 1.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.132Z", "level":"INFO", "x-corralation-Id" :
> "modified-value", "logger":"logger", "message":"thread 3.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" :
> "modified-value", "logger":"logger", "message":"thread 4.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" :
> "modified-value", "logger":"logger", "message":"thread 6.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" :
> "modified-value", "logger":"logger", "message":"thread 8.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" :
> "modified-value", "logger":"logger", "message":"thread 0.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.219Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 7.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.179Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 5.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 2.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.234Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 9.", "data":(null)}
> {code}
> This is what I was expecting:
> {code:title=goodresult.txt|borderStyle=solid}
> {"timestamp":"2017-04-05T12:31:41.117Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 1.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.132Z", "level":"INFO", "x-corralation-Id" :
> "modified-value", "logger":"logger", "message":"thread 3.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 4.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 6.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 8.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 0.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.219Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 7.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.179Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 5.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 2.", "data":(null)}
> {"timestamp":"2017-04-05T12:31:41.234Z", "level":"INFO", "x-corralation-Id" :
> "original-value", "logger":"logger", "message":"thread 9.", "data":(null)}
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)