日期:2014-05-18  浏览次数:20716 次

ThreadPool与其它代码 执行先后顺序 求解
如下代码:

C# code
 if (this.lstb1.Items.Contains(Keywords.Trim()) || Keywords == "")continue;
 ThreadPool.QueueUserWorkItem(new WaitCallback(addKeyWords3), Keywords);

这段代码 在执行if 语句前 有可能先执行了ThreadPool.QueueUserWorkItem这里的代码 会导致if语句失效. 
这样的说法正确吗?

如果正确,那么以下这段是一定先执行if语句 而不会先执行ThreadPool.QueueUserWorkItem这句吗?:

 
C# code
     if (this.lstb1.Items.Contains(Keywords.Trim()) || Keywords == "")
                         {
                             continue;
                         }
                         else
                         {
                             ThreadPool.QueueUserWorkItem(new WaitCallback(addKeyWords3), Keywords);
                         }


------解决方案--------------------
上下两段代码是一样的,如果是多线程环境下执行这段代码,那么不同线程下可能存在一个在执行if,一个在执行addKeyWords3。

如果你是上多线程环境下使用,那么建议保护好你的公用数据,比如 Keywords。
------解决方案--------------------
这得看你if满足不,走哪就走哪