当前位置:编程学习 > C#/ASP.NET >>

有没有朋友用过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的方法异步返回之后(在此期间线程挂起)再执行下面的代码的。你以为呢? --------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
await
wait本来就是等待的意思。

所谓async的方法,本身不会阻塞调用者的线程,但是它自己,当然是要等await的方法异步返回之后(在此期间线程挂起)再执行下面的代码的。你以为呢?

偶说的是超时无效。超时啊。 --------------------编程问答-------------------- 木人知道。。 --------------------编程问答-------------------- cao
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,