如何在c#中的属性getter中获取异步服务调用结果

时间:2017-02-12 08:21:25

标签: c# asynchronous service properties

如何在getter属性中获取异步调用结果? 我的代码示例是:

public  override  byte[] AddressBasedDocFile
        {
            get
            {   BaseInfoImplementationClient.AlfrescoServiceProxy.AlfrescoServicesProxyClient client = new BaseInfoImplementationClient.AlfrescoServiceProxy.AlfrescoServicesProxyClient();
                client.GetDataCompleted+=client_GetDataCompleted;
                client.GetDataAsync(this.ObjectId)  ;                       
            }
            set
            {
                base.AddressBasedDocFile = value;
            }
        }

        void client_GetDataCompleted(object sender, BaseInfoImplementationClient.AlfrescoServiceProxy.GetDataCompletedEventArgs e)
        {   
            e.Result
        }

有一个解决方案here使用任务来完成这项工作,但据我所知,我无法更改client.GetDataAsync(this.ObjectId)以使其返回一个值,它实际上是一个异步服务调用。 / p>

1 个答案:

答案 0 :(得分:2)

属性不能声明为异步。

我建议您重新考虑将getter更改为异步函数,例如

public async Task<bytes[]> GetAddressBasedDocFileAsync()
{
   ....
}

Getter应该快速执行,不应该抛出异常。在getter中执行远程网络调用会破坏这两个最佳实践。