簡體   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