繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM