1

可能重复:
构造函数可以是异步的

我有一个类示例,它从互联网上提取了一些关于创建的信息。

public class Example
{
    string information;    

    public Example()
    {
        //Pull information
    }
}

现在我想让 Example 成为可等待的,因为在创建后继续该部分之前创建 Example 很重要。

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

我怎样才能做到这一点?

4

2 回答 2

0

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

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

可能类似于:C#:阻塞函数调用直到满足条件

于 2012-10-28T13:17:14.500 回答
0

您可以这样做,但我认为这不是一个好方法,因为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;
    }
}
于 2012-10-28T13:29:35.463 回答