相关疑难解决方法(0)

使用await/async时,HttpClient.GetAsync(...)永远不会返回

编辑: 这个问题看起来可能是同一个问题,但没有回复......

编辑:在测试用例5中,任务似乎陷入WaitingForActivation状态.

我在.NET 4.5中使用System.Net.Http.HttpClient遇到了一些奇怪的行为 - 其中"等待"调用(例如)的结果httpClient.GetAsync(...)将永远不会返回.

只有在使用新的async/await语言功能和Tasks API时才会出现这种情况 - 在仅使用continuation时,代码似乎始终有效.

下面是一些重现问题的代码 - 将其放入Visual Studio 11中新的"MVC 4 WebApi项目"中,以显示以下GET端点:

/api/test1
/api/test2
/api/test3
/api/test4
/api/test5 <--- never completes
/api/test6
Run Code Online (Sandbox Code Playgroud)

这里的每个端点都返回相同的数据(来自stackoverflow.com的响应头),除非/api/test5从未完成.

我在HttpClient类中遇到过错误,还是以某种方式滥用了API?

代码重现:

public class BaseApiController : ApiController
{
    /// <summary>
    /// Retrieves data using continuations
    /// </summary>
    protected Task<string> Continuations_GetSomeDataAsync()
    {
        var httpClient = new HttpClient();

        var t = httpClient.GetAsync("http://stackoverflow.com", HttpCompletionOption.ResponseHeadersRead);

        return t.ContinueWith(t1 => t1.Result.Content.Headers.ToString());
    }

    /// <summary>
    /// Retrieves data using async/await
    /// …
Run Code Online (Sandbox Code Playgroud)

.net c# asynchronous async-await dotnet-httpclient

297
推荐指数
3
解决办法
17万
查看次数

标签 统计

.net ×1

async-await ×1

asynchronous ×1

c# ×1

dotnet-httpclient ×1