2012-10-28 136 views
0

可能重复:
Can constructors be async如何创建一个等待课堂?

我有一个类实例,拉从创建时的几个互联网信息。

public class Example 
{ 
    string information;  

    public Example() 
    { 
     //Pull information 
    } 
} 

现在我想让示例变得可以等待,因为在创建之后继续创建示例之前创建示例很重要。

public async void SetupSomething() 
{ 
    Example ex = new Example(); 
    await ex; 
    // Do something with ex 
} 

我该怎么做?

回答

1

你可以做到这一点,但我认为这不是一个好办法,因为没有强制await你开始使用实例之前。

我认为一个好主意应该是创建静态异步方法来创建您的对象。例如:

class Example 
{ 
    private Example() 
    { 
    } 

    private async Task InitializeAsync() 
    { 
     // get the required data asynchronously here 
    } 

    public static async Task<Example> CreateAsync() 
    { 
     var result = new Example(); 
     await result.InitializeAsync(); 
     return resul; 
    } 
} 
0

那么,构造函数应该等待,直到它完成它的东西。毕竟,线程用来创建它来自调用它的方法。

但是,我认为非常重要的是向我们展示构造函数在做什么。有一个很好的机会调用某个地方启动另一个线程,并不等待它解决,使构造函数返回,同时没有你正在谈论的所有“信息”。

可能是类似于:C# : Blocking a function call until condition met