C#5.0异步等待返回一个列表(C# 5.0 async await return a list)

2019-08-17 11:51发布

我正在学习有关异步/在等待着,碰到了一个情况,我需要调用异步方法应该返回一个对象或同一对象的名单。
这是实现正确的方法是什么?

从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)

Answer 1:

我不知道你想完成什么样的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)
{
}


Answer 2:

为了能够运行方法,异步,你需要有内等待。 如果你没有它,它会作为同步方法来运行。 这可能是为什么它不为你工作。 要做到这一点,你可以这样做:

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

然后运行它。

var list = await GetList()


文章来源: C# 5.0 async await return a list