这里我有一个全局变量,它存储for循环的索引。这是一个漫长的过程,因此每个过程都在Task
内完成。在Task
内部,索引值存储在变量中。在后台进程运行时,我有另一种方法从全局变量中获取值。但它返回不正确。
int myCount = -1;
Task BackgroundTask;
List<int> Count = new List<int>();
protected void Run_Click(object sender, EventArgs e)
{
BackgroundTask = new Task(() =>
{
for (int i = 0; i < 1000000; i++)
{
myCount = myCount + 1;
Thread.Sleep(1000);
}
});
BackgroundTask.Start();
}
protected void Check_Click(object sender, EventArgs e)
{
Count.Add(myCount);
}
此处,当使用myCount
方法完成时,访问变量Check_Click
的值始终返回-1。但该线程仍在运行。为什么会如此?如何在不使变量静态的情况下获得计数值?
答案 0 :(得分:0)
它似乎与编译器优化有关。尝试使用volatile关键字标记索引变量定义,该关键字通知编译器多个线程将访问变量的事实。
52