我有一个客户端服务器应用程序。 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方法。
我在这里打了一堵砖墙,甚至不知道从哪里开始看这里。任何建议都会非常有用。
答案 0 :(得分:1)
如果您在同步上下文中运行,则在以下情况下会出现死锁:
task.Result
await
修复是使用.ConfigureAwait(false)
来避免在同步上下文中发布延续:
var response = await _httpClient.GetAsync(BaseApiAddress).ConfigureAwait(false);
当然,尽可能避免同步等待任务。