日期:2014-05-20  浏览次数:20898 次

关于线程安全的问题,请指点....
        /// <summary>
        /// 资源下载
        /// </summary>
        public event Action<string> GetResourceCompleted;

        //发起请求
        public void GetResourceAsync(string[] id, ResourceType type)
        {
        }

        void ResourceDownCallback(ActionResult result)
        {
            if (this.GetResourceCompleted == null)
                return;
            //方法1
            // 有人这样写,说是线程安全
            Action<string> handler = GetResourceCompleted;//??线程安全?
            handler("这样写线程就安全了?");

            //方法2
            //个人以为写上一写法没区别,求指点
            this.GetResourceCompleted("这样线程就不安全了?");
        }
------解决方案--------------------
这和线程安全有啥关系。

关键是多线程时,更新UI控件内容,需要用到 Control.Invoke(delegate, params object[]);
------解决方案--------------------
如果是一个线程,你怎么写都安全,你代码跟线程安全没有半毛钱关系,关键看GetResourceCompleted代码,里面是否有对数据访问的同步机制或锁机制
------解决方案--------------------
无非是同步异步。

这是典型的异步 请求-完成 模型。
------解决方案--------------------
我问的是方法1与方法2的区别,异步请求的确没啥疑问......我也始终认为这没什么区别
------解决方案--------------------
引用:
我问的是方法1与方法2的区别,异步请求的确没啥疑问......我也始终认为这没什么区别


我想说的是,你的代码和线程安全没有半毛钱关系。

要说方法1,2的区别——方法1,是脱裤子放屁啊。本身就是event了。再赋给delegate调用。蛋疼啊
------解决方案--------------------
找到一篇文章,是c#本质论中的   http://www.cnblogs.com/lmfeng/archive/2011/11/16/2251516.html  请看第5节......