【发布时间】:2019-05-07 12:25:05
【问题描述】:
我有以下方法:
public async IEnumerable<string> GetListDriversAsync()
{
var drives = await graphClient.Drive.Root.Children.Request().GetAsync();
foreach (var d in drives)
yield return d.ToString();
}
但是编译器错误提示:
"async 的返回类型必须为 void,Task 或 Task
<T>"
方法异步时如何返回 IEnumerable?
【问题讨论】:
-
将你的方法签名重命名为
public async Task<IEnumerable<string>> GetListDriversAsync() -
我已经试过了,它说:“主体不能是迭代器,因为 Task
> 不是接口类型” -
简短的回答是,在当前版本的 C# 中无法完成您想做的事情。如果将迭代器方法封装在本地函数中,则可以保留它,但您需要完全填充集合并返回它以使用
async关键字和Task<T>返回类型。目前不支持“async yield return”。 -
您正在尝试做的是“异步枚举” - 这是一个 vNext 功能;现在:没有很好的选择
标签: c#