假设我们有一个下面的程序,在其Start方法中,它将一些长时间运行的任务委托给另一个线程。当Stop方法被调用时,我需要确保工作线程完成执行当前任务并且不会将其留在中间。如果它已完成任务并处于睡眠状态,则可以立即停止。等待主线程停止,直到任务被异步线程处理
请指导我该怎么做。
static int itemsProcessed = 0;
static Thread worker;
static void Start()
{
var ts = new ThreadStart(Run);
worker = new Thread(ts);
worker.Start();
}
static void Stop()
{
//wait until the 'worker' completes processing the current item.
Console.WriteLine("{0} Items Processed", itemsProcessed);
}
static void Run(object state)
{
while (true)
{
ALongRunningTask();
itemsProcessed++;
Thread.Sleep(1000);
}
}
这需要处理为易失性,否则其他线程可能永远不会注意到值被更改。您也可以使用worker.Join方法代替睡眠循环。 – 2010-12-03 05:06:38