2014-01-25 35 views
0

叫我regardin异步方法,我在构造函数中调用,以及如何解决或者是有一个良好的工作围绕一个问题,这里是在构造一个例子异步方法是从构造

public Constructor() 
{ 
Value = PopulateValueFromDB(); //async method 
CalculateInDB(); // async method 
} 

public async Task<string> PopulateValueFromDB() 
{ 
... do some async calls 
return await ... 
} 

public async Task CalculateInDB() 
{ 
... 
return await ... 
} 

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

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

关于PopulateVlaue方法......我必须返回的东西......

那么,有没有变通IR I不应该使用这些方法,然后,让他们同步,而不是异步的?

+1

为什么要这样?你想做什么?如果您打电话给尚未初始化的财产,您预期会发生什么? – Andre

+0

嗯,我只是试图将我所有的方法转换为异步:)它是一个web应用程序...是的...虽然它从数据库中读取数据资源是免费的另一个请求 – Alnedru

+0

和当然它不是有一个财产没有初始化的想法:/ – Alnedru

回答

4

我有async constructors博客文章,涵盖了各种办法。如果可能,我建议您使用工厂模式,因此:

private Constructor() 
{ 
} 

private InitializeAsync() 
{ 
    Value = await PopulateValueFromDBAsync(); 
    await CalculateInDBAsync(); 
} 

public static async Task<Constructor> Create() 
{ 
    var ret = new Constructor(); 
    await ret.InitializeAsync(); 
    return ret; 
} 
-2

这是一个使用旧技术的时间!

ThreadPool.QueueUserWorkItem。

干杯 -