求教:.net 3.5多线程代码如何改成4.0 task任务来处理?
本帖最后由 tylrr 于 2013-12-20 02:45:43 编辑 请教大伙,我想用多线程来抓取一组链接的数据,我的思路是每个线程取到一个链接后,抓取完该链接的数据后,把该链接元素从待处理链接数组中删除。 我原来的代码是3.5下面运行的,现在想改成用4.0新增的task 特性来达到同样的效果,请问应该如何修改?
还有一个问题是,使用了task后,如果某个线程发生了异常(比如数据抓取不全),如何重启该线程并重新活链接进行处理? 谢谢
//声明全局变量:所有待处理的网址数组
public static List<string> links = new List<string>();
//按钮事件
private void button1_Click(object sender, EventArgs e)
{
threadOne = new Thread(new ThreadStart(getItemDetail));//两个线程共同做一件事情
threadTwo = new Thread(new ThreadStart(getItemDetail));//两个线程共同做一件事情
threadOne.Name = "线程1";
threadTwo.Name = "线程2";
threadOne.Start();
threadTwo.Start();
}
private void getItemDetail() //处理函数
{
string link = null; //单条网址
while (true)
{
Monitor.Enter(links);//锁定,保持同步
link = (string)links[0];
。。。somecode here// 具体的处理语句,每次处理需要耗时一分钟
links.RemoveAt(0);//删除链接数组List中的元素
if (links.Count == 0)
{
ThreadEnd();//引发完成事件
}
toolStripStatusLabel1.Text = Thread.CurrentThread.Name + "抓取" + link + "成功...";
Monitor.Exit(links);//取消锁定
Thread.Sleep(5);
}
}