运行时不同线程中的变量范围
本文关键字:变量 范围 线程 运行时 | 更新日期: 2023-09-27 18:17:47
考虑以下代码:
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
事件被引发,它在不同的线程上运行它的方法。检查dowork
事件处理程序内部的局部变量flag
的值是否安全,因为我觉得代码在调用worker.RunWorkerAsync
后退出MyMethod
?
这里flag
没有问题,因为有一个叫做闭包的概念。然而,特别是对于线程,这个可能是危险的(使用你最喜欢的搜索引擎)。
根据您对'安全'的定义,可以在DoWork
中检查局部变量flag
,因为它仍然在该方法的范围内。虽然说它不一定是线程安全的