C#中的线程上下文是什么?

8
我有一个WCF服务,并且它会记录每次调用到数据库中。如果发生异常,它也会被记录到另一个数据库中。
我想要一种方法将这两个日志联系起来,以便我们可以查看可能导致异常的原因。为此,我想要获得每个调用的某种唯一标识符。
由于整个过程都在单线程上执行,例如,我可以将线程名称设置为GUID,如 System.Threading.Thread.CurrentThread.Name = Guid.NewGuid().ToString(); 但这有点不专业。
在网络上搜索时,我发现了 System.Threading.Thread.CurrentContext.SetProperty(),但我想知道这个上下文到底是什么。它是否设计用于存储线程持续时间的属性?是否对于每个线程都是唯一的?
如果我有5个同时进行的WCF调用,如果它不是“按调用”而是“按线程”,我不希望在上下文中发生任何冲突。
能否有人澄清一下?
1个回答

7

2
作为更新,如果您正在使用.NET 4.6,则应该从使用ThreadLocal切换到AsyncLocal,这允许您的存储在异步/等待边界上流动,其中您可能会跳转线程。 - Scott Chamberlain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接