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;
}

如果我想返回一个对象列表会发生什么?我应该创建一个包含列表的包装器?并返回那个包装?
因为这不适用:

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 回答