如何创建一个等待的课程?

时间:2012-10-28 12:43:18

标签: c# windows-runtime async-await

  

可能重复:
  Can constructors be async

我有一个类示例,可以在创建时从互联网上提取多个信息。

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
}

我该怎么做?

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

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

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

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