WCF异步调用不返回数据
本文关键字:返回 数据 调用 异步 WCF | 更新日期: 2023-09-27 18:10:38
我有一个关于异步调用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;
}
}
我没有收到任何类型的错误,它只是没有获取所需的数据。
添加一个调用ConfigureAwait和传递false作为continueOnCapturedContext值似乎已经解决了这个问题。
它与从主UI线程调用异步代码导致死锁有关。至少快速的研究是这样说的。遗憾的是,目前我没有足够的时间进一步了解它。
var result = await _client.GetComputerAsync(request).ConfigureAwait(false);