如何在构造函数中处理异步方法调用?

时间:2015-12-15 21:33:31

标签: c# wpf design-patterns constructor async-await

我在构造函数中添加了对异步方法的调用,以便在加载时初始化ViewModel的数据。

但是我注意到在VM构造函数中调用该方法时出现了警告。它声明"this call is not awaited"

我从这个错误中理解,呼叫需要以await为前缀。但这也意味着构造函数必须标记为async Task我知道它不能在C#中。因为构造函数不能同步。

我确实在这里遇到了similar question,但是一些与我的实现相关的实用代码示例使用了依赖注入,这将是一种帮助。

有没有人有一个例子,如何重构构造函数的调用? 或者使用什么实现模式?

这是ViewModel的摘要版本,显示了我如何在构造函数中调用该方法:

namespace MongoDBApp.ViewModels
{

    [ImplementPropertyChanged]
    public class CustomerDetailsViewModel 
    {

        private IDataService<CustomerModel> _customerDataService;
        private IDataService<Country> _countryDataService;

        public CustomerDetailsViewModel(IDataService<CustomerModel> customerDataService, IDataService<Country> countryDataService) 
        {
            this._customerDataService = customerDataService;
            this._countryDataService = countryDataService;

            //warning about awaiting call, shown here...
            GetAllCustomersAsync();

        }


      #region Properties


        public ObservableCollection<CustomerModel> Customers { get; set; }

        public ObservableCollection<Country> Countries { get; set; }


      #endregion


        #region methods


        private async Task GetAllCustomersAsync()
        {
            var customerResult = await _customerDataService.GetAllAsync();
            Customers = customerResult.ToObservableCollection();

            var countryResult = await _countryDataService.GetAllAsync();
            Countries = countryResult.ToObservableCollection();
        }



        #endregion

    }
}

0 个答案:

没有答案