从主线程中删除线程



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

我有以下问题需要解决:

我有一个应用程序,您可以指定它应该使用多少线程,然后启动它。

我知道ThreadPool可以做到这一点,但我需要更多的功能,我不知道如何实现它,所以它会在所有线程完成时进行回调,并在需要时停止所有线程和队列。

一个想法是制作一个新线程,并从那里使用线程池,这样当我杀死威胁时,它杀死的是从该线程开始的威胁(作为主线程)。同样,通过这种方式,我可以将其设置为在队列被清除时回调(单个线程)。

您可以使用Task s和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();

同时运行的线程数由TaskFactory中的ThreadPool根据机器报告的CPU内核为您管理。如果你想要更多的控制,我相信可以提供你自己的自定义任务工厂。