IAsyncEnumerable 不包含 ADO.NET 中 'GetAwaiter' 的定义

IAsyncEnumerable does not contain a definition for 'GetAwaiter' in ADO.NET

此代码在 .Net Core 3.1、C# 8 中:

 await  dB.GetListAsync<OrigineDB>();  

导致此错误:

IAsyncEnumerable does not contain a definition for 'GetAwaiter'

此处提供的答案: 对我帮助不大,因为我的方法包含示例中的 yield 和循环。

我应该做哪些改变?我不想 return 列表。

 async IAsyncEnumerable<T> GetListAsync<T>() where T : class, new()
        {
            cn = new SqlConnection(cs);
            cn.Open();
            cmd = new SqlCommand(nameProcStock, cn);
            cmd.CommandType = CommandType.StoredProcedure;

            if (parms != null)
                foreach (KeyValuePair<string, object> kvp in parms)
                    cmd.Parameters.AddWithValue(kvp.Key, kvp.Value);

            dr = await cmd.ExecuteReaderAsync();
            while (dr.Read())
                yield return ConvertToObject<T>();
        }

如果方法 returns 类型为 IAsyncEnumerable<T> 的对象,则您无法等待它,事实上您不必等待。您可以简单地在异步 foreach 循环中使用它,并在循环主体中使用它的内容。

您可以这样消费 IAsyncEnumerable<T>

await foreach (var item in db.GetListAsync<OrigineDB>()) 
{
    // do what ever you want
}