CallContext的LogicalCallContext在多线程环境下面公用变量_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > CallContext的LogicalCallContext在多线程环境下面公用变量

CallContext的LogicalCallContext在多线程环境下面公用变量

 2014/9/21 3:12:14  12饕餮21  程序员俱乐部  我要评论(0)
  • 摘要:压根名听说过这个类的看这里:如何实现对上下文(Context)数据的统一管理原来以为CallContext就可以直接在多线程环境下面共享使用的,今天突然想到:Asp.Net环境下面,设置来设置去的,对象不就被多个客户端搞乱了吗?随做了以下代码测试:staticvoidMain(string[]args){CallContext.LogicalSetData("key","1");Threadtrd=newThread(newThreadStart(()=>{Console
  • 标签:多线程 all 线程

压根名听说过这个类的看这里:如何实现对上下文(Context)数据的统一管理

原来以为CallContext就可以直接在多线程环境下面共享使用的,今天突然想到:Asp.Net环境下面,设置来设置去的,对象不就被多个客户端搞乱了吗?

随做了以下代码测试:

class="brush:csharp;gutter:true;">static void Main(string[] args)
        {
            CallContext.LogicalSetData("key", "1");

            Thread trd = new Thread(new ThreadStart(() =>
            {

                Console.WriteLine("first thread : " + CallContext.LogicalGetData("key"));

                Thread.Sleep(1000);

                Console.WriteLine("first thread : " + CallContext.LogicalGetData("key"));

            }));
            trd.Start();
            Thread.Sleep(100);

            CallContext.LogicalSetData("key", "2");

            Thread trd1 = new Thread(new ThreadStart(() =>
            {

                Console.WriteLine("second thread : " + CallContext.LogicalGetData("key"));

            }));
            trd1.Start();


            Console.Read();
        }

 结果是这个鸟样子:

 

看来是我想多了啊,汗。。。

摘抄一段官方点的说明(来自artech大神的博客):

LogicalCallContext:LogicalCallContext 类是在对远程应用程序域进行方法调用时使用的 CallContext 类的一个版本。CallContext 是类似于方法调用的线程本地存储的专用集合对象,并提供对每个逻辑执行线程都唯一的数据槽。数据槽不在其他逻辑线程上的调用上下文之间共享。当 CallContext 沿执行代码路径往返传播并且由该路径中的各个对象检查时,可将对象添加到其中。当对另一个 AppDomain 中的对象进行远程方法调用时,CallContext 类将生成一个与该远程调用一起传播的 LogicalCallContext。只有公开 ILogicalThreadAffinative 接口并存储在 CallContext 中的对象被在 LogicalCallContext 中传播到 AppDomain 外部。不支持此接口的对象不在 LogicalCallContext 实例中与远程方法调用一起传输。

"CallContext 类将生成一个与该远程调用一起传播的 LogicalCallContext。"

这里应该是说只管传递过去,不管引用关系了,类似“值传递”吧。

 

欢迎大神斧正。。。

上一篇: 使用Telerik控件搭建Doubanfm频道部分 下一篇: 没有下一篇了!
发表评论
用户名: 匿名