在.NET异步编程中,我正在寻找一些相关数据,这些数据在具有相同根源的所有异步任务中都是一致的。在最简单的级别,我希望在我的日志记录中记录此相关标识符,以便我可以快速查看异步"线程"活动。
我正在寻找的相关数据是这样的,在下面的代码中,TestCorrelation()中的异常永远不会被抛出:
private T _correlation;
private void TestCorrelation(T correlation)
{
if (correlation != _correlation) throw new Exception("Ain't it");
}
public async Task MyMethod()
{
_correlation = someCorrelator;
await MyMethod2();
await Task.Run(() =>
{
await Task.Delay(1);
TestCorrelation(someCorrelator);
});
}
public async Task MyMethod2()
{
TestCorrelation(someCorrelator);
await Task.Run(() =>
{
await Task.Delay(1);
TestCorrelation(someCorrelator);
});
}
异步编程中是否有任何内置(例如Task的属性)会给我这样的相关性?
答案 0 :(得分:3)
正如@svick所说,你可以使用LogicalCallContext
。但是,有两个重要的限制:
Microsoft.Bcl.Async
)等等。在某些框架(特别是.NET 4.0)上,代码将很好地编译但不能正常工作 ImmutableStack
醇>
我有详细信息on my blog。