循环请求多个页面问题,在线等。

zhanglong_longlong 2015-10-19 12:01:58

var tasks = new Task[Url.Count];
for (int i = 0; i < tasks.Length; i++)
{
tasks[i] = Task.Factory.StartNew(() =>
{

string url = string.Format("{0}{1}/",Url[i], PathLogic.RootDomain);
//这里对url进行httpWebRequest请求操作

});
}
Task.WaitAll(tasks);

以上代码进行循环去请求多个url页面,但是以上代码运行的时候,一直提示错误,请问应该怎么解决呢?
...全文
184 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanglong_longlong 2015-10-19
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
不需要其它代码,这样就异常了?
应该怎么写的?
  • 打赏
  • 举报
回复
不需要其它代码,这样就异常了?
zhanglong_longlong 2015-10-19
  • 打赏
  • 举报
回复
谢谢大家。。
wanghui0380 2015-10-19
  • 打赏
  • 举报
回复
木看代码,不过现在可以直接异步做,不需要这样构造啊

var httpclient=new HttpClient();
var Pages=Url.Select(p=>httpclient.GetStringAsync(p));
string[] await Task.WhenAll(Pages.ToArray());
  • 打赏
  • 举报
回复
var Url = new List<string>() { "1", "2", "3" };
string domain = "abc.com";
var tasks = new Task[Url.Count];
for (int i = 0; i < tasks.Length; i++)
{
    var idx = i;
    tasks[i] = Task.Factory.StartNew(() =>
    {
        string url = string.Format("{0}{1}/", Url[idx], domain);
        //这里对url进行httpWebRequest请求操作
        Console.WriteLine(url);
    });
    //tasks[i] = Task.Factory.StartNew((index) =>
    //{
    //    string url = string.Format("{0}{1}/", Url[(int)index], domain);
    //    //这里对url进行httpWebRequest请求操作
    //    Console.WriteLine(url);
    //}, i);
}
Task.WaitAll(tasks);
这样至少直接是没有问题了,如果你还有问题,可能是你后面的代码问题
zhanglong_longlong 2015-10-19
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
闭包问题,两种解决方式,好吧,其实是同一种做法,第一个,在for循环里面定义个局部变量,比如var idx=i然后在task里面修正Url[i]为Url[idx],或者你用带参数的Action重载方法,将i作为参数传入
我改成for (int i = 0; i < tasks.Length; i++) { int index = i; tasks[index] = Task.Factory.StartNew(() => { string url = string.Format("{0}{1}/",Url[index], PathLogic.RootDomain); //这里对url进行httpWebRequest请求操作 }); }了,还是会弹出那个
ajianchina 2015-10-19
  • 打赏
  • 举报
回复

for (int i = 0; i < tasks.Length; i++)
{
	tasks[i] = Task.Factory.StartNew(() =>
	{
	   
			string url = string.Format("{0}{1}/",Url[i], PathLogic.RootDomain);
		   //这里对url进行httpWebRequest请求操作
		 
	});
}

//=>

for (int i = 0; i < tasks.Length; i++)
{
	int index = i;
	tasks[index] = Task.Factory.StartNew(() =>
	{
	   
			string url = string.Format("{0}{1}/",Url[index], PathLogic.RootDomain);
		   //这里对url进行httpWebRequest请求操作
		 
	});
}
  • 打赏
  • 举报
回复
闭包问题,两种解决方式,好吧,其实是同一种做法,第一个,在for循环里面定义个局部变量,比如var idx=i然后在task里面修正Url[i]为Url[idx],或者你用带参数的Action重载方法,将i作为参数传入

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧