首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

.net 3.5多线程代码怎么改成4.0 task任务来处理

2013-12-21 
求教:.net 3.5多线程代码如何改成4.0 task任务来处理?本帖最后由 tylrr 于 2013-12-20 02:45:43 编辑请教

求教:.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);
            }
        }


[解决办法]
private void button1_Click(object sender, EventArgs e)
{
    Task.Factory.StartNew(getItemDetail);
    Task.Factory.StartNew(getItemDetail);
}

热点排行