有没有朋友用过async await的异步http?,超时是无效的。是何原因或原理?
async Task<string> DDD()
{
var req = WebRequest.Create("http://www.nipusa.net/x.php");
req.Timeout = 1; // ま、このTimeoutはイミナイですよ
var res = await req.GetResponseAsync();
return await new StreamReader(res.GetResponseStream()).ReadToEndAsync();
}
async void button1_Click(object sender, EventArgs e)
{
while (true)
{
try
{
string sss = await DDD();
richTextBox1.Text += sss;
}
catch (WebException ex)
{
string s = "a";
}
}
}
上边代码是精简的。我用php建了个页面。在页面里sleep了60多秒。我发现超时并不生效。同步没有问题。我也不想换成httpclient。现在用的是扩展Task<T>与Task的方法实现超时。但我想知道原因。
因为在一个爬虫中。总是在访问一些网址的时候“死掉”。也不返回。开始以为死锁。后来发现死锁的可能性不大。因为死锁的话。不可能会运行一两个小时再死。而且加入超时后。6个多少时过去了。没有“死掉”现象。那多半是超时引起的“死掉”
当然。上边的代码在php页面sleep完成输出后能获取输出值。但如果这个页面一直不返回。它也一直不返回。
原理原因何在?原理原因何在?原理原因何在?原理原因何在?原理原因何在?原理原因何在?
另外:请《sp1234》大神不用回复我的帖子。跪谢。 --------------------编程问答-------------------- await
wait本来就是等待的意思。
所谓async的方法,本身不会阻塞调用者的线程,但是它自己,当然是要等await的方法异步返回之后(在此期间线程挂起)再执行下面的代码的。你以为呢? --------------------编程问答--------------------
偶说的是超时无效。超时啊。 --------------------编程问答-------------------- 木人知道。。 --------------------编程问答-------------------- cao
补充:.NET技术 , C#