private async void button1_Click(object sender, EventArgs e)
{
var cookie = webBrowser1.Document.Cookie;
await
Task.WhenAll(
listBox1
.Items
.Cast<string>()
.Select(async s =>
{
var data = "action=relationship&user_id=" + s + "&relation=follow";
var req = WebRequest.Create("http://example.com") as HttpWebRequest;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = data.Length;
req.Headers["cookie"] = cookie;
using (var sw = new StreamWriter(await req.GetRequestStreamAsync(), Encoding.ASCII))
{
sw.Write(data);
sw.Close();
}
}));
listBox1.Items.Clear();
}
我已经尝试了一百万次,并且每次都运行两次。当它运行它两次时,它会按照预期的那样运行。
它应该做的是从列表框中获取项目,并将每个项目用作POST请求的一部分。然后,当它完成后,它会清除列表框。
有人可以解释什么是错的吗?
答案 0 :(得分:1)
您应该致电req.GetResponseAsync()
以实际发送请求。
答案 1 :(得分:0)
添加到@SLaks
我们遇到了同样的问题,结果证明这是一个问题,而不是原本猜测的问题。
您需要.Dispose()或至少.Close()您从.GetResponseAsync获得的响应,否则下一次调用.GetRequestStreamAsync会挂起。< / p>
这背后的代码似乎拥有一些有限(相当低)的套接字或锁定数量,在前一个请求完成之前不允许进一步的请求甚至开始。