考虑以下代码:
public void MyMethod()
{
bool flag=true;
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (x, y) =>
{
//time consuming task
if (flag)
{
//do something
}
};
worker.RunWorkerCompleted += (x, y) =>
{
if (flag)
{
//do something
}
};
worker.RunWorkerAsync();
}
也许是一个愚蠢的问题,但据我所知,在runworkerasync
调用之后,会引发dowork
事件,该事件在不同的线程上运行其方法。是否在flag
eventhandler中检查局部变量dowork
的值是否安全,因为我觉得在调用MyMethod
后代码退出worker.RunWorkerAsync
?
答案 0 :(得分:4)
由于名为Closures的概念,此处flag
没有问题。但是,特别是对于线程而言可以是危险的(使用您最喜欢的搜索引擎)。
答案 1 :(得分:0)
根据您对'safe'的定义,可以检查flag
中的局部变量DoWork
,因为它仍然在该方法的范围内。说过它可能不一定是线程安全的。