我正在学习有关异步/在等待着,碰到了一个情况,我需要调用异步方法应该返回一个对象或同一对象的名单。
这是实现正确的方法是什么?
从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)
我不知道你想完成什么样的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)
{
}
为了能够运行方法,异步,你需要有内等待。 如果你没有它,它会作为同步方法来运行。 这可能是为什么它不为你工作。 要做到这一点,你可以这样做:
public async Task<List<string>> GetList()
{
return await Task.Run(() => new List<string>() {"a", "b"});
}
然后运行它。
var list = await GetList()