您的位置:首页 > 产品设计 > UI/UE

防止线程退出的几种方案-不再while(true)

2017-04-25 16:38 741 查看
有时候 调试程序的时候 。我们需要防止程序退出。比如调试一个定时服务。方法1 while(true) {Thread.Sleep(1000)}方法 2——(推荐) Well when you do that with
Thread.Sleep(1000)
, your processor wastes a tiny amount of time to wake up and do nothing.You could do something similar with CancelationTokenSource.When you call
WaitOne()
, it will wait until it receives a signal.
CancellationTokenSource cancelSource = new CancellationTokenSource();

public override void Run()
{
//do stuff
cancelSource.Token.WaitHandle.WaitOne();
}

public override void OnStop()
{
cancelSource.Cancel();
}

方法3

An alternative approach may be using an
AutoResetEvent
and instantiate it signaled by default.
public class Program
{
public static readonly AutoResetEvent ResetEvent = new AutoResetEvent(true);

public static void Main(string[] args)
{
Task.Factory.StartNew
(
() =>
{
// Imagine sleep is a long task which ends in 10 seconds
Thread.Sleep(10000);

// We release the whole AutoResetEvent
ResetEvent.Set();
}
);

// Once other thread sets the AutoResetEvent, the program ends
ResetEvent.WaitOne();
}
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: