HttpClient发送但未收到请求

时间:2017-07-01 11:22:18

标签: c# wpf api

我有一个客户端服务器应用程序。 Wpf - Web api我有一些麻烦,因为这是在一台机器上工作,但当我切换到另一台机器时,它没有。

    public async Task<IEnumerable<T>> Get()
    {
        var result = (IEnumerable<T>)null;

        //Gets to this line and does not throw exception
        var response = await _httpClient.GetAsync(BaseApiAddress);

        if (!response.IsSuccessStatusCode)
        {
            ThrowInvalidException(response);
        }
        var resultAsString = await response.Content.ReadAsStringAsync();
        result = JsonConvert.DeserializeObject<IEnumerable<T>>(resultAsString);
        return result;
    }

API方法:

    [HttpGet]
    public virtual IEnumerable<T> Get()
    {
        var items = Repository.Get().ToArray();
        return items;
    }

和存储库:

    public IQueryable<T> Get()
    {
        return _context.Set<T>();
    }

我到了api,它通过代码调试得到数据,它有数据,看起来好像在api上完成了方法。所有这些说它永远不会返回到GetAsync方法。

我在这里打了一堵砖墙,甚至不知道从哪里开始看这里。任何建议都会非常有用。

1 个答案:

答案 0 :(得分:1)

如果您在同步上下文中运行,则在以下情况下会出现死锁:

  • 调用者在任务上同步等待(例如,调用task.Result
  • 在任务内部,您使用await

修复是使用.ConfigureAwait(false)来避免在同步上下文中发布延续:

var response = await _httpClient.GetAsync(BaseApiAddress).ConfigureAwait(false);

当然,尽可能避免同步等待任务。