有一个项目类似于数据筛选,包括海洗,再选,选出所有符合条件的数据。有两种方案
1。开两个线程,做同样的事情
比如说海选线程是这样的
 while (!stop)
{
if(this.list海选.count>0)
{
foreach(string str in this.list)
{
DOSOMETING海选();....
//费时工作
if(达到某个条件)
{
this.list再选.add(str);
}
}
}
else{
//暂时没有新数据
}
Thread.sleep(300);
}
再选跟海选一样,没有数据就等待,有数据就执行 while (!stop)
{
if(this.list再选.count>0)
{
foreach(string str in this.list)
{
DOSOMETING再选();....
//费时工作
if(达到某个条件)
{dosomething_GO()
//执行费时操作
}
}
}
else{
//暂时没有新数据
}
Thread.sleep(300);
}
2.只开一个海选线程,然后异步执行再选中的方法。this.list再选.add(str);这个换掉,  ThreadPool.QueueUserWorkItem(new WaitCallback(dosomething再选))
去掉了再选线程。我自己觉的各有利弊。海选差不多一样,再选的时候,第一种方法需要等待时间,但又减少了线程启动的时间,但线程空转也是浪费CPU,影响海选1线程的效率。第二种方法每次启动新线程要浪费50MS,好像有点得不偿失。大家觉的呢?有没有更好的办法呢