首页新闻找找看学习计划

C# Thread 对象的管理

0
[待解决问题]

因为新建线程开销较大,所以希望能对线程回收利用(一个线程执行任务后重新利用)

class Data
{
  string data;
  public Data(string d)
  {
    data = d;
  }
  public void Work()
  {
    Console.WriteLine("ok " + data);
  }
}

Data d1=new Data("A");
Data d2=new Data("B");
Thread t = new Thread(d1.Work);
t.Start();

请问,如何才能使创建的线程对象执行d1的任务后,再去执行d2的任务(再次利用t所指对象去执行)???

alexsunc的主页 alexsunc | 菜鸟二级 | 园豆:204
提问于:2017-05-28 16:26
< >
分享
所有回答(3)
1

感觉完全没必考考虑你说的再次利用t所指对象去执行?

不知道你说的意思是不是还是用原来的线程去执行接下来的任务,如果是这个的意思的吧,你可以用Task 的回调或者用 委托的beginInvoke的回调,我记得的回调里的任务是用的同一个线程去执行的。。

Emrys5 | 园豆:223 (菜鸟二级) | 2017-05-28 16:57
0

你可以用ThreadPool.ququeworkitem(),这个方法你不用管线程,直接把任务丢给线程池,让系统去维护这些线程,也可以Task.Run();或者new task();

Bluto | 园豆:317 (菜鸟二级) | 2017-05-28 21:45
0

线程太多,效果可能适得其反。你可以把所有任务加入到一个List中,然后开一定量的线程,然后同步锁住List,每次获取List[0]后,再把这个任务从List移除,然后交给线程去执行,下面是伪代码

   var task=null;
   while(taskStatus){
              lock(lockThread){
                if(taskList.Count<1){
                 break;
                }
             task=taskList[0];
             taskList.RemoveAt(0);
           }
            //执行task任务
   
   }

taskStatus //全局的线程状态
lockThread  //同步锁

 

 

孤零落叶寒 | 园豆:564 (小虾三级) | 2017-05-29 08:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册