6

私は async/await について学んでいて、オブジェクトまたは同じオブジェクトのリストを返す非同期メソッドを呼び出す必要がある状況に遭遇しました。
これは正しい実装方法ですか?

AManager.cs から

public async Task Initialize(string objectPath)
{
    AnObject someObject = await BClass.GetAnObject(objectPath);
}

これが呼び出されたメソッドです

Class B:
public async Task<AnObject> GetAnObject(string objectPath)
{
    AnObject someObj = new AnObject();
    return someObj;
}

object のリストを返したい場合はどうなりますか? リストを含むラッパーを作成する必要がありますか? そのラッパーを返しますか?
これは当てはまらないため:

public async Task<List<AnObject>> GetAnObject(string objectPath)
4

2 に答える 2

23

メソッドを非同期として実行できるようにするには、内部で待機する必要があります。持っていない場合は、同期メソッドとして実行されます。それがおそらくあなたにとってうまくいかなかった理由です。これを達成するには、次のようなことができます。

public async Task<List<string>> GetList()
{
    return await Task.Run(() => new List<string>() {"a", "b"});
}

そして、それを実行するには:

var list = await GetList()
于 2013-03-12T13:59:16.477 に答える
2

あなたが達成しようとしていることがTask<List<AnObject>>適用できないことはわかりませんが、上記の例で AnObject のリストを返す別の例を次に示します

public class AnObject()
{
    SomeProperty {get; set;}
    Some Method(); 
}

public class theCollectionofAnObject : IList<AnObject> ()
{
    private List<AnObject> _contents = new List<AnObject>;

    //Implement the rest of IList interface

}

//Your async method
public Task<theCollectionofAnObject> GetAnObjects(parameter)
{
}
于 2013-03-12T08:26:04.370 に答える