【问题标题】:Request.GetResponseAsync() doesn't work in Background Task, no exception raisedRequest.GetResponseAsync() 在后台任务中不起作用,没有引发异常
【发布时间】:2015-10-01 00:32:33
【问题描述】:

我正在使用 Visual Studio 开发通用 Windows 平台应用程序,但遇到了一个非常奇怪的问题。它是 Windows 运行时组件上的后台任务。如果删除有问题的代码部分,后台任务将毫无问题地执行。

当代码到达第一句 (WebRequest request = WebRequest.Create(_finalURI);) 时,WebResponse response = await request.GetResponseAsync(); 立即停止后台任务,无一例外,没有任何东西。很奇怪。

     WebRequest request = WebRequest.Create(_finalURI);
     WebResponse response = await request.GetResponseAsync(); // Here it closes
     Stream dataStream = response.GetResponseStream();
     StreamReader reader = new StreamReader(dataStream);
     textResponse = reader.ReadToEnd();

这对我来说是非常罕见的情况。 I uploaded a video to YouTube so you can see it as it happens。我已经经历了两个多小时:(并继续努力。

编辑:

我已更改为 HttpClient 类,并且行为相同。

var httpClient = new HttpClient();
textResponse = await httpClient.GetStringAsync(_finalURI); // Here it closes
httpClient.Dispose();

编辑 2:

按照 Scott Chamberlain 的要求进行方法签名:

public async Task<ArticleList> GetArticleList(ArticleAttributes attributes,
ImageResFromAPI imageres, string singleArticle)

【问题讨论】:

  • 因为该异常来自另一个线程,而不是您尝试捕获的该线程
  • @Adelaiglesia:你获得延期了吗?
  • 请包含您从中调用此方法的方法签名
  • 你找到原因了吗?我的应用也在做同样的事情

标签: c# webrequest background-task getresponse


【解决方案1】:

我也遇到了同样的问题。应用程序无任何异常关闭。即使在AppDomain.CurrentDomain.UnhandledException

它很奇怪,但如果你使用,而不是使用await request.GetResponseAsync();

var webResponseTask = request.GetResponseAsync();

await Task.WhenAll(webResponseTask);

if (webResponseTask.IsFaulted)
  throw webResponseTask.Exception;

using (var webResponse = webResponseTask.Result)
{
}

你可以绕过这个问题。

【讨论】:

    猜你喜欢
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2016-10-11
    • 1970-01-01
    • 2015-11-02
    相关资源
    最近更新 更多