Tag: generator

我如何使`await …`使用`yield return`(即在迭代器方法中)?

我现有的代码看起来类似于: IEnumerable GetStuff() { using (SqlConnection conn = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand(sql, conn) { conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { SomeClass someClass = f(reader); // create instance based on returned row yield return someClass; } } } 看来我可以通过使用reader.ReadAsync()获益。 但是,如果我只修改一行: while (await reader.ReadAsync()) 编译器通知我await只能在标记为async方法中使用,并建议我将方法签名修改为: async Task<IEnumerable> GetStuff() 但是,这样做会使GetStuff()无法使用,因为: GetStuff()的主体不能是迭代器块,因为Task<IEnumerable>不是迭代器接口类型。 我确信我错过了异步编程模型的关键概念。 […]