繁体   English   中英

C#5.0异步等待返回一个列表

[英]C# 5.0 async await return a list

我正在学习async / await,并遇到了我需要调用async方法的情况,该异步方法应该返回一个对象或同一对象的列表。
这是正确的实施方式吗?

来自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)

为了能够以异步方式运行方法,您需要在内部等待。 如果你没有它,它将作为同步方法运行。 这可能就是为什么它不适合你。 为此,您可以执行以下操作:

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

然后运行它:

var list = await GetList()

我不确定您正在尝试完成的Task<List<AnObject>>不适用,但这是另一个在上面的示例中返回AnObject的List的示例

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)
{
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM