我有
public static async Task<IEnumerable<ParseTask>> GetArchiveTodos()
{
using(SqlConnection connection = new SqlConnection(SharedInfo.ConnectionString))
using(SqlCommand command = new SqlCommand("GetArchiveTodos", connection))
{
command.CommandType = CommandType.StoredProcedure;
await connection.OpenAsync();
SqlDataReader row = await command.ExecuteReaderAsync();
while(await row.ReadAsync())
{
ParseTask pageToParse = new ParseTask()
{
Id = row.GetInt32(0),
PageType = row.GetString(1),
Html = row.IsDBNull(2) ? null : row.GetString(2),
ThreadId = row.IsDBNull(3) ? null : (int?)row.GetInt32(3),
PageNum = row.GetInt32(4)
};
yield return pageToParse;
}
}
}
我收到了错误
严重级代码描述项目文件行抑制状态 错误CS1624&#39; ArchiveDb.GetArchiveTodos()&#39;的主体不可能是一个 迭代器阻止因为&#39;任务&gt;&#39;不是 迭代器接口类型
答案 0 :(得分:1)
从异步方法返回IEnumerable我出错了什么?
这根本不受支持。你不能将Task<IEnumerable<T>>
返回方法作为迭代器,即;您无法使用yield
关键字。已有针对此here的提案,但尚未得到支持。迭代器所需的返回类型为IEnumerable
而非Task
- 正如Evk在评论中所述。