当前位置: 首页 > 编程语言 > C#

经典永无止境的线程循环使用任务?分享

时间:2023-04-11 01:51:26 C#

经典永无止境的线程循环使用任务?给定一个很常见的线程场景:declarationprivateThread_thread;私人布尔_isRunning=假;start_thread=newThread(()=>NeverEndingProc());线程。开始();方法privatevoidNeverEndingProc(){while(_isRunning){do();可以在异步tcp侦听器中使用,该侦听器等待回调直到它通过让线程用完(_isRunning=false)停止。现在我想知道:是否可以对Task做同样的事情?使用CancellationToken?或者只是一个期望结束并报告状态的程序的任务?您可以通过将NeverEndingProc传递给NeverEndingProc.Run来实现此目的。但是,在功能上有一个重要的区别:如果异常从裸线程的NeverEndingProc传播,它将使进程崩溃。如果它在任务上,它将抛出一个TaskScheduler.UnobservedException,然后它会被默默地忽略(自.NET4.5起)。也就是说,您还可以探索其他选项。例如,ReactiveExtensions几乎消除了对“无限线程循环”的任何需求。使用Task+CancellationToken的原因之一是使各个流程及其取消彼此更加独立。在您的示例中,请注意NeverEndingProc如何直接引用同一类中的_isRunning字段。相反,您可以接受外部令牌:Start:publicvoidStartNeverEndingProc(CancellationTokentoken){Task.Factory.StartNew(()=>NeverEndingProc(token),token);}方法:privatevoidNeverEndingProc(CancellationTokentoken){while(true){token.ThrowIfCancellationRequested();做();取消现在由调用者管理,可以应用于多个独立的任务:以上是C#学习教程:Classicnever-endingthreadloopusingtasks?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——varinstance=newYourClass();varcts=newCancellationTokenSource();instance.StartNeverEndingProc(cts.Token);//开始你的任务StartOtherProc(cts.Token);//开始另一个任务cts.Cancel();//取消两者如转载请注明出处: