截止形式我有一個WinForms應用程序,它由一個主UI線程和4個任務。我的主要形式有這樣一個私有成員級別的變量:與任務運行
private bool keepThreadsRunning = false;
在我的主要形式的Load()事件,我有以下幾點:
keepThreadsRunning = true;
var task1Worker = Task.Factory.StartNew(() => DoStuff1());
var task2Worker = Task.Factory.StartNew(() => DoStuff2());
var task3Worker = Task.Factory.StartNew(() => DoStuff3());
var task4Worker = Task.Factory.StartNew(() => DoStuff4());
裏面我的每個DoStuff的()方法,我基本上有這樣的:
while (keepThreadsRunning)
{
// do work here
Thread.Sleep(30000); // a couple of my tasks only need to run every 30 seconds or so
}
最後,在我的Form_Closing()事件處理程序,我有以下幾點:
keepThreadsRunning = false;
this.Close();
看着我在任務管理器應用程序,看來,當我閉上形式,但我有點困惑的四個任務的過程已經結束。我的調用this.Close()真的導致這些任務終止(即使它們在Thread.Sleep()調用時)?有沒有比我現在編碼的方式更好的完成此方法?
編輯 - 我簡單看了一下任務取消(當我的應用程序退出),但我的理解是,我的任務就需要定期檢查取消標記以確定它們是否已取消。因爲我的一些任務需要每30秒運行,我無法弄清楚如何我實現一個30秒等待(目前的Thread.Sleep()),並且仍然有任務來檢查取消標記。