C#中的线程上下文到底是什么?
我有一个WCF服务,它记录每个对数据库的调用。稍后,如果发生异常,也会将其记录到单独的数据库中 我想要一种将这两个日志绑定在一起的方法,这样我们就可以看到导致异常的原因。要做到这一点,我需要一种独特的ID,我可以为每个电话 由于整个过程都在单个线程上执行,因此我可以将线程名称设置为GUID,例如C#中的线程上下文到底是什么?,c#,wcf,threadcontext,C#,Wcf,Threadcontext,我有一个WCF服务,它记录每个对数据库的调用。稍后,如果发生异常,也会将其记录到单独的数据库中 我想要一种将这两个日志绑定在一起的方法,这样我们就可以看到导致异常的原因。要做到这一点,我需要一种独特的ID,我可以为每个电话 由于整个过程都在单个线程上执行,因此我可以将线程名称设置为GUID,例如System.Threading.thread.CurrentThread.name=GUID.NewGuid().ToString()但这有点不正常 在网上搜索,我发现了System.Threading
System.Threading.thread.CurrentThread.name=GUID.NewGuid().ToString()代码>但这有点不正常
在网上搜索,我发现了System.Threading.Thread.CurrentContext.SetProperty()
,但我想知道这个上下文到底是什么。它是否设计为在线程期间存储属性?每个线程都是唯一的吗
如果我同时有5个WCF调用,我不希望上下文中发生的事情之间有任何冲突,如果不是“每次调用”
有人能澄清一下吗?我不会使用这个属性,因为微软说它仅供内部使用:
“此API支持.NET Framework基础结构,不打算直接从您的代码中使用。”
但是,您应该能够使用来做同样的事情。该链接给出了一个示例,说明如何为线程设置字符串属性
另请参见作为更新,如果您使用的是.NET 4.6,您应该从使用ThreadLocal
切换到,这允许您的存储跨异步/等待边界流动,在那里您可能会跳转线程。