关于线程安全的问题,请指点....
/// <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,是脱裤子放屁啊。本身就是event了。再赋给delegate调用。蛋疼啊
------解决方案--------------------找到一篇文章,是c#本质论中的 http://www.cnblogs.com/lmfeng/archive/2011/11/16/2251516.html 请看第5节......