我有一个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)