[英]Fetching data of a background task from main thread
在这里,我有一个全局变量,用于存储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);
}
在这里,当使用Check_Click
方法完成访问变量myCount
的值时, myCount
始终返回-1。 但是线程仍在运行。 为什么会这样,如何在不使变量静态的情况下获得计数值?
它似乎与编译器优化有关。 尝试用volatile关键字标记索引变量定义,该变量将告知编译器多个线程将访问该变量的事实。
volatile int myCount = -1;
Task BackgroundTask;
//rest of the code
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.