多线程时如何分别抓取项目?

时间:2014-04-26 10:52:59

标签: c# multithreading

我是多线程的新手(就像我今晚开始学习的那样)我刚写了一个刮刀,我做了多线程。但它只是在两个线程上擦除相同的数据两次而不是单独抓取它,这就是我使它成为多线程的原因(时间效率

例如,如果我正在抓:

1  
2  
3  
4  
5  
6  
7  
8

我将程序设置为使用2个线程,输出类似于:

1  
2  
1  
2  
3  
3  
4  
5  
5  
4  
6  
7  
6  
8  
7  
8

基本上,不是多个线程更快地抓取数字列表,而是为每个线程擦除整个列表一次,这会导致输出中的重复(并且我非常确定相同的抓取速度)

对不起,如果其中任何一个不清楚或听起来愚蠢或者其他什么,我就像我说的那样对多线程很新。如果我在帖子中不清楚,我会清除任何事情

2 个答案:

答案 0 :(得分:1)

您可以使用Parallel - 类。 看看这个:http://msdn.microsoft.com/en-us/library/dd537608(v=vs.110).aspx

Parallel.ForEach(yourList, (listItem) =>
{
    Debug.WriteLine(listItem);
});

有关详细信息,请查看我上面发布的网站。

答案 1 :(得分:0)

一种通用方法是使用job pool,您的主线程将工作线程提供给工作线程,然后工作线程只对其获取的数据进行处理。因此,您没有任何重复。你并没有真正使用多线程,你基本上只做了两次。

根据您的具体问题,可能还有其他方式,例如两个线程只执行每个第二项或类似的事情。