杀死主要线程

时间:2012-02-23 01:25:11

标签: c# multithreading

我对线程有点新,因为到目前为止我从未需要它在高级级别。

我有以下需要解决的问题:

我有一个应用程序,您可以在其中指定应该使用的线程数,然后启动它。

我知道这可以通过ThreadPool完成,但我需要更多的功能,我不知道如何制作它所以它在所有线程完成后进行回调,并且在需要时停止所有线程和队列的函数

一个想法是创建一个新线程并从那里使用线程池,这样当我杀死那个威胁时它会杀死那个从该线程开始的(主要的)。同样,我可以将它设置为在清除队列时回调(单线程)。

1 个答案:

答案 0 :(得分:3)

您可以使用TaskCancellationToken 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。