public void AttachValue_AsyncTaskLevels_DoesntGoToOuterScope() { LogContext.Clear(); var pair1 = new KeyValuePair <string, object>("1", 1); async Task Thing1() { await Thing2(); CollectionAssert.AreEquivalent(new KeyValuePair <string, object> [0], LogContext.Current.GetValues()); } async Task Thing2() { SetValue(); CollectionAssert.AreEquivalent(new[] { pair1 }, LogContext.Current.GetValues()); await Task.CompletedTask; } void SetValue() { LogContext.Current.AttachValue(pair1); } Thing1().GetAwaiter().GetResult(); }
public async Task AttachValue_AsyncTaskOuterScope_DoesntGoToOuterScope() { LogContext.Clear(); var pair1 = new KeyValuePair <string, object>("1", 1); var pair2 = new KeyValuePair <string, object>("2", 2); async Task Foo() { await Task.CompletedTask; LogContext.Current.AttachValue(pair2); await Task.CompletedTask; } await Foo(); LogContext.Current.AttachValue(pair1); var actualValues = LogContext.Current.GetValues(); var expectedValues = new[] { pair1 }; CollectionAssert.AreEquivalent(expectedValues, actualValues); }