是啊.现在的异步模型可以直接用waitall或者.ContinueWith就可以了
线程完了有事件的啊,你不会连自己开了多少线程都没记录吧?
开了多少线程是动态分配的,单个线程完了的确有事件,但我想要所有线程都执行完的那个事件呀?莫非只能另开一个线程不断检测这些子线程的状态
@卞新欢: 你找本NET4.5的书看看吧,有惊喜的。
计数器,每个线程完毕的事件中,操作计数器,当计数器 == 线程总数的时候,就ok了。。
可以使用公共变量,也可以使用回调函数
Semaphore 搜索下这个类。
我之前处理这个问题的思路是,我用 Semaphore 初始化10个资源,开启10个线程,每个线程结束后,就关闭一个资源。主线程会在开始线程之后,开始不停的占用资源。大致代码如下:
Semaphore sem = new Semaphore(0, 10, "cnblogs"); for(var i=0;i<100;i++) { //申请资源 sem.WaitOne(); //开启线程 ThreadPool.QueueUserWorkItem(new WaitCallback( obj=>{ //...执行对应的逻辑 //释放资源 sem.Release(); })); } //主线程必须保证子线程全部OK for (var i=0; i<10;i++) { //因为初始化了10个资源,所以主线程就把10个资源都抢过来 sem.WaitOne();//当资源不足的时候,代码会卡在这里,等待。 } //子线程全部消亡后 就可以做你想做的事了
用
System.Threading.Tasks.Task.WaitAll() 应该可以满足你的需求
join