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