Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中的线程上下文到底是什么?_C#_Wcf_Threadcontext - Fatal编程技术网

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

C#中的线程上下文到底是什么?,c#,wcf,threadcontext,C#,Wcf,Threadcontext,我有一个WCF服务,它记录每个对数据库的调用。稍后,如果发生异常,也会将其记录到单独的数据库中 我想要一种将这两个日志绑定在一起的方法,这样我们就可以看到导致异常的原因。要做到这一点,我需要一种独特的ID,我可以为每个电话 由于整个过程都在单个线程上执行,因此我可以将线程名称设置为GUID,例如System.Threading.thread.CurrentThread.name=GUID.NewGuid().ToString()但这有点不正常 在网上搜索,我发现了System.Threading

我有一个WCF服务,它记录每个对数据库的调用。稍后,如果发生异常,也会将其记录到单独的数据库中

我想要一种将这两个日志绑定在一起的方法,这样我们就可以看到导致异常的原因。要做到这一点,我需要一种独特的ID,我可以为每个电话

由于整个过程都在单个线程上执行,因此我可以将线程名称设置为GUID,例如
System.Threading.thread.CurrentThread.name=GUID.NewGuid().ToString()但这有点不正常

在网上搜索,我发现了
System.Threading.Thread.CurrentContext.SetProperty()
,但我想知道这个上下文到底是什么。它是否设计为在线程期间存储属性?每个线程都是唯一的吗

如果我同时有5个WCF调用,我不希望上下文中发生的事情之间有任何冲突,如果不是“每次调用”


有人能澄清一下吗?

我不会使用这个属性,因为微软说它仅供内部使用:

“此API支持.NET Framework基础结构,不打算直接从您的代码中使用。”

但是,您应该能够使用来做同样的事情。该链接给出了一个示例,说明如何为线程设置字符串属性


另请参见

作为更新,如果您使用的是.NET 4.6,您应该从使用
ThreadLocal
切换到,这允许您的存储跨异步/等待边界流动,在那里您可能会跳转线程。