从主线程中获取后台任务的数据

时间:2015-11-16 07:34:09

标签: c# parallel-processing task-parallel-library

这里我有一个全局变量,它存储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。但该线程仍在运行。为什么会如此?如何在不使变量静态的情况下获得计数值?

1 个答案:

答案 0 :(得分:0)

它似乎与编译器优化有关。尝试使用volatile关键字标记索引变量定义,该关键字通知编译器多个线程将访问变量的事实。

52