我遇到了有关WCF Web服务方法的异步调用的问题。当使用await运算符调用时,它拒绝返回请求的对象。调用其同步对应项工作正常或使用Task<>上的Result属性。它返回的对象。它是从作为客户端的WPF应用程序主线程调用的。我没有玩线程公寓,只是留下了生成的一切 我真的不明白,我已经创建了一个简单的控制台测试应用程序,添加了相同的服务引用和异步调用工作正常。 我正在使用Visual Studio 2013。
public async Task<GetComputerResponse> GetComputer(int computerId)
{
try
{
_client = new ServiceClient(_endpoint);
_client.Open();
GetComputerRequest request = new GetComputerRequest()
{
ComputerId = computerId
};
var result = await _client.GetComputerAsync(request); // the debugger seems to stop execution here, refuses to break at the very next line
/* _client.GetComputer(request) or await _client.GetComputerAsync(request).Result work as expected */
_client.Close();
return result;
}
catch (Exception)
{
_client.Abort();
return null;
}
}
我没有收到任何类型的错误,它根本无法获取所需的数据 提前谢谢。
答案 0 :(得分:1)
添加对ConfigureAwait的调用并传递false作为continueOnCapturedContext值似乎解决了问题。
它与从主线程UI线程调用的异步代码有关,导致死锁。所以快速研究说,至少。不幸的是,目前我还没有足够的时间去了解它。
var result = await _client.GetComputerAsync(request).ConfigureAwait(false);