如何同时运行一些线程而不会“运行两次”或“失败”其中一个?我将用一个例子来解释我的问题:
private int count = 0;
private HashSet<int> hs_pages = new HashSet<int>();
for (int page = 1; page <= 10; page++)
{
Thread thread = new Thread(unused => my_method(page));
thread.Name = "Thread - " + page.ToString();
thread.Start();
}
while(count < 10)
{
}
并my_method()
实现为:
public void my_method(int page)
{
if (hs_pages.Add(page))
{
count++;
//My Codes
}
else
{
MessageBox.Show("this is duplicate of page : " + page.ToString());
}
}
运行此代码后,我发现有些页面(1-10)没有运行,有些页面运行了两次。
所以while()
永远不会因为那些重复和失败而结束。
我怎样才能修复那些重复和失败?
我的失败的意思不是“错误”,我的意思是例如my_method(4)
从不运行,我的重复的意思是例如my_method(3)
运行两次。
我知道还有其他方法,例如Parallel.ForEach
,但我想学习如何使用 Thread 类。