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
}
此代码在 .Net Core 3.1、C# 8 中:
await dB.GetListAsync<OrigineDB>();
导致此错误:
IAsyncEnumerable does not contain a definition for 'GetAwaiter'
此处提供的答案:
我应该做哪些改变?我不想 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
}