我有以下方法:
public async IEnumerable<string> GetListDriversAsync()
{
var drives = await graphClient.Drive.Root.Children.Request().GetAsync();
foreach (var d in drives)
yield return d.ToString();
}
Run Code Online (Sandbox Code Playgroud)
但是编译器错误说:
“async 的返回类型必须是 void、Task 或 Task
<T>”
当方法为异步时如何返回 IEnumerable?
尝试这个:
public async Task<IEnumerable<string>> GetListDriversAsync()
{
var drives = await graphClient.Drive.Root.Children.Request().GetAsync();
IEnumerable<string> GetListDrivers()
{
foreach (var d in drives)
yield return d.ToString();
}
return GetListDrivers();
}
Run Code Online (Sandbox Code Playgroud)
在C# 8 中可以使用另一种方法。它使用IAsyncEnumerable。
public async IAsyncEnumerable<string> GetListDriversAsync()
{
var drives = await graphClient.Drive.Root.Children.Request().GetAsync();
foreach (var d in drives)
yield return d.ToString();
}
Run Code Online (Sandbox Code Playgroud)
它会稍微改变您的签名,这可能(也可能不是)适合您。
用法:
await foreach (var driver in foo.GetListDriversAsync())
{
Console.WriteLine(driver );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2529 次 |
| 最近记录: |