首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# -从WebResponse获取响应

C# -从WebResponse获取响应
EN

Stack Overflow用户
提问于 2016-03-06 03:47:00
回答 1查看 519关注 0票数 0

我正在尝试下载放在互联网上的RSS feed的XML源代码,但是当我的进程到达WebResponse语句(下面的第二行)时,进程停止,下一步没有发生任何事情。没有错误,没有异常,也没有类似的东西。我等了几十分钟,还是什么也没发生。

代码语言:javascript
复制
WebRequest request = WebRequest.Create(source.Url);
WebResponse response = await request.GetResponseAsync(); // at this line it stops
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream);

string xml = readStream.ReadToEnd().Trim();

readStream.Dispose();
response.Dispose();

知道是什么原因造成的吗?

编辑:

代码语言:javascript
复制
public static async Task<string> GetContent(string uri)
{
    WebRequest request = WebRequest.Create(url);

    using (WebResponse response = await request.GetResponseAsync().ConfigureAwait(false))
    {
        Stream receiveStream = response.GetResponseStream();
        StreamReader readStream = new StreamReader(receiveStream);

        return readStream.ReadToEnd().Trim();
    }
}

public async Task<ObservableCollection<Source>> GetArticlesFromSource()
{
    sourceDefinitions = await GetSourceDefinitions();

    string imageFolderName = "ArticleImages";
    string imageFolderPath = localFolder.Path + "\\" + imageFolderName;
    StorageFolder imageFolder = await localFolder.CreateFolderAsync(imageFolderName, CreationCollisionOption.ReplaceExisting);

    foreach (var source in sourceDefinitions)
    {
        if (source.Selected == "true")
        {
            ObservableCollection<Article> articlesStep1 = new ObservableCollection<Article>();
            /*WebRequest request = WebRequest.Create(source.Url);
            WebResponse response = await request.GetResponseAsync();
            Stream receiveStream = response.GetResponseStream();
            StreamReader readStream = new StreamReader(receiveStream);*/

            string xml = await GetContent("http://www.honzachalupa.cz/").ConfigureAwait(false);

            Debug.WriteLine(xml);
            ...
EN

回答 1

Stack Overflow用户

发布于 2016-03-06 04:20:45

您的应用程序几乎肯定是在调用堆栈更靠上的返回任务上调用WaitResult,我在我的博客上详细解释了这个will cause a deadlock

要修复它,请找到上游Wait/Result调用并将其更改为await。换句话说,使用"async all way“。

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

https://stackoverflow.com/questions/35818995

复制
相关文章

相似问题

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