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;
        }
    }

我没有收到任何类型的错误,它只是没有获取所需的数据。

WCF异步调用不返回数据

添加一个调用ConfigureAwait和传递false作为continueOnCapturedContext值似乎已经解决了这个问题。
它与从主UI线程调用异步代码导致死锁有关。至少快速的研究是这样说的。遗憾的是,目前我没有足够的时间进一步了解它。

var result = await _client.GetComputerAsync(request).ConfigureAwait(false);