1

.Net Core 3.1、C# 8 中的这段代码:

 await  dB.GetListAsync<OrigineDB>();  

导致此错误:

IAsyncEnumerable 不包含“GetAwaiter”的定义

此处提供的答案:https ://stackoverflow.com/a/60148747/4180382对我没有多大帮助,因为我的方法包含像示例中一样的产量和循环。

我应该做些什么改变?我不想返回列表。

 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>();
        }
4

1 回答 1

7

如果一个方法返回一个类型的对象,IAsyncEnumerable<T>您不能等待它,实际上您不必等待。您可以简单地在异步 foreach 循环中使用它,并在循环体中使用它的内容。

你可以像这样消费IAsyncEnumerable<T>

await foreach (var item in db.GetListAsync<OrigineDB>()) 
{
    // do what ever you want
}
于 2020-05-06T07:44:06.877 回答