首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将代码更改为使用异步方法而不是同步方法将迫使我的WebClient永不超时(20 minute++)

将代码更改为使用异步方法而不是同步方法将迫使我的WebClient永不超时(20 minute++)
EN

Stack Overflow用户
提问于 2016-06-24 15:44:43
回答 1查看 86关注 0票数 0

我有两个asp.net MVC web应用程序,如下所示:

  1. ApplicationA .它是部署在iis-8下的Asp.net mvc-4 .
  2. ApplicationB.它是部署在iis-8下的Asp.net mvc-5 .

现在,在我的ApplicationA中,我有以下方法,它将在applicationB上调用一个操作方法(home/sync),如下所示:

代码语言:javascript
复制
public List<Technology> GetTechnology(int? currentfiltertype)
  {
     try
      {
        using (WebClient wc = new WebClient())
         {
           string url = currentURL + "home/sync?filtertype=" + currentfiltertype;
           wc.Headers.Add("Authorization", token);
           string json = wc.DownloadString(url);
           List<Technology> result = JsonConvert.DeserializeObject<List<Technology>>(json);
           return result;
         }
      }
      catch (Exception e){}
  }

现在我已经注意到,当WebClient调用action方法,并且该方法在大约2分钟内没有收到响应时,它将引发超时异常。但是由于web应用程序B上的home/sync操作方法需要大约30分钟才能完成。所以我在寻找一个解决方案来延长网络客户端超时时间。因此,我尝试将代码更改为如下所示的异步方法,主要是将wc.DownloadString替换为wc.DownloadStringTaskAsync,如下所示:

代码语言:javascript
复制
public async Task<List<Technology>> GetTechnology(int? currentfiltertype)
{
   try
    {
      using (WebClient wc = new WebClient())
       {
         string url = currentURL + "home/sync?filtertype=" + currentfiltertype;
         wc.Headers.Add("Authorization", token);
         string json = await wc.DownloadStringTaskAsync(url);
         List<Technology> result = JsonConvert.DeserializeObject<List<Technology>>(json);
         return result;
       }
   }
   catch (Exception e) {}
} 

现在看来WebClient永远不会过期..。我试着调用action方法,web客户端在没有引发任何超时异常的情况下一直等待响应超过20分钟,然后它收到了来自web applicationB的响应,一切都进行得很好。那么,有谁能建议为什么更改我的代码以使用上述代码中所示的异步方法,从而导致WebClient不超时呢?我无法理解使用异步逻辑与延长web客户机的超时时间之间的关系(不确定WebClient是否会在异步方法中超时!)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-24 17:16:01

有人能建议为什么改变我的代码以使用上面代码中所示的异步方法,导致WebClient不超时吗?

答案有点令人费解:WebRequest属性仅用于同步请求。

(不确定WebClient是否会在异步方法中超时!!)

它不直接支持异步超时,但它支持(它自己的)取消,您可以在计时器之后触发它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38017277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档