多线程应用程序的最后一个线程

Xaq*_*ron 5 c# multithreading

我有一个ac #console应用程序,它有一些线程可以做一些工作(下载文件).每个线程可以随时在应用程序的任何位置退出应用程序,但我会在控制台上显示正确的消息.跟踪它们是可能的,但对我来说没有意义.我只想检查线程计数或类似的东西,找出哪一个是最后一个线程,并在退出时做一些事情.这样做的最佳做法是什么?

伪代码:

if (lastThread)
{
   cleanUp();
   Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Ree*_*sey 11

这是一个使用新的任务并行库可以使生活更轻松的地方.您可以使用多个任务,而不是创建线程,并在线程上进行旋转处理:

var task1 = Task.Factory.StartNew( () => DoTaskOneWork() );
var task2 = Task.Factory.StartNew( () => DoTaskTwoWork() );
var task3 = Task.Factory.StartNew( () => DoTaskThreeWork() );

// Block until all tasks are done

Task.WaitAll(new[] {task1, task2, task3} );
cleanUp(); // Do your cleanup
Run Code Online (Sandbox Code Playgroud)

如果"任务"只是下载一堆单个文件,你甚至可以使用PLINQ简化这个:

var fileUrls = GetListOfUrlsToDownload();

fileUrls.AsParallel().ForAll( fileUrl => DownloadAndProcessFile(fileUrl) );

cleanUp(); // Do your cleanup
Run Code Online (Sandbox Code Playgroud)