1

重複の可能性:
コンストラクターを非同期にすることはできますか

作成時にインターネットからいくつかの情報を取得するクラスExampleがあります。

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 に答える