我对线程有点新,因为到目前为止我从未需要它在高级级别。
我有以下需要解决的问题:
我有一个应用程序,您可以在其中指定应该使用的线程数,然后启动它。
我知道这可以通过ThreadPool完成,但我需要更多的功能,我不知道如何制作它所以它在所有线程完成后进行回调,并且在需要时停止所有线程和队列的函数
一个想法是创建一个新线程并从那里使用线程池,这样当我杀死那个威胁时它会杀死那个从该线程开始的(主要的)。同样,我可以将它设置为在清除队列时回调(单线程)。
答案 0 :(得分:3)
您可以使用Task
和CancellationToken
s:
var taskCount = 10;
var cancellationTokenSource = new CancellationTokenSource();
for (int i = 0; i < taskCount ; i++)
{
var cancellationToken = cancellationTokenSource.Token;
Task.Factory.StartNew(() =>
{
// do work here.
// Also periodically check
if( cancellationToken.IsCancellationRequested )
return;
// or wait on wait handle
cancellationToken.WaitHandle.WaitOne(timeout);
}, cancellationToken);
}
// to cancel all threads
cancellationTokenSource.Cancel();
根据计算机报告的CPU核心,TaskFactory中的ThreadPool为您管理并发运行的线程数。如果你想要更多控制,我可以提供你自己的自定义TaskFactories。