从构造函数调用的异步方法

我有一个问题,我在构造函数中调用async方法,如何解决或有一个很好的解决方案,这里是一个例子

public Constructor() { Value = PopulateValueFromDB(); //async method CalculateInDB(); // async method } public async Task PopulateValueFromDB() { ... do some async calls return await ... } public async Task CalculateInDB() { ... return await ... } 

基本上在构造函数中我有一个错误,因为我不能使用等待那里,我不能使它异步。

对于CalculateInDB我可以使它返回无效,然后我解决它的问题,虽然我读到某处返回void不是很好的解决方案。

关于PopulateVlaue方法……我必须返回一些东西……

那么是否有一个解决方案,我不应该使用那些方法然后使它们同步而不是异步?

我有关于async构造函数的博客文章,涵盖了各种方法。 如果可能,我建议你使用工厂模式,如下:

 private Constructor() { } private InitializeAsync() { Value = await PopulateValueFromDBAsync(); await CalculateInDBAsync(); } public static async Task Create() { var ret = new Constructor(); await ret.InitializeAsync(); return ret; } 

这是使用旧技术的时候了!

ThreadPool.QueueUserWorkItem。

干杯 –