将 GetFieldValueAsync 与 GetFieldType 中的类型一起使用

using GetFieldValueAsync with type from GetFieldType

我有一个通用的 reader,我想将它从同步转换为异步。

原代码为

while (DR.Read())
{
    count++;
    Field[] fields = new Field[DR.FieldCount];
    for (int i = 0; i < DR.FieldCount; i++)
    {
        Field field = new Field();
        field.RowCount = count;
        field.FieldCount = i;
        field.Name = DR.GetName(i);
        field.DataType = DR.GetDataTypeName(i);
        // decimal overflow workaround 
        field.ObjValue =
            field.DataType == "Decimal"?
            DR.GetDouble(i) :
            DR.GetValue(i);
        fields[i] = field;
    }
    yield return fields;
}

没关系。 我尝试做的是

List<Field[]> ret = new List<Field[]>();
while (await DR.ReadAsync())
{
    count++;
    Field[] fields = new Field[DR.FieldCount];
    for (int i = 0; i < DR.FieldCount; i++)
    {
        Field field = new Field();
        field.RowCount = count;
        field.FieldCount = i;
        field.Name = DR.GetName(i);
        field.DataType = DR.GetDataTypeName(i);
        // decimal overflow workaround 
        field.ObjValue =
            field.DataType == "Decimal" ?
            ((object)await DR.GetFieldValueAsync<double>(i)) :
            ((object)await DR.GetFieldValueAsync(i));
        fields[i] = field;
    }
    ret.Add(fields);
}

由于错误 CS0411

而无法正常工作

The type arguments for method 'GetFieldValueAsync' cannot be inferred from the usage. Try specifying the type arguments explicitly.

我也试过从 Type t = DR.GetFieldType(i) 指定类型,但我也做不到 await DR.GetFieldValueAsync<t>(i)

我在这里运气不好吗?

我应该在我的异步方法中恢复到以下阻塞代码吗?

// decimal overflow workaround 
field.ObjValue =
    field.DataType == "Decimal" ?
    DR.GetDouble(i) :
    DR.GetValue(i);

为什么没有 DR.GetValueAsync(i) 返回像同步对象那样的对象有理论上的原因吗??

小记,题外话

如果有人坚持要知道我为什么要为十进制编写不同的代码,this is the issue

我假设你在谈论 DbDataReader Class

来自文档:

Reads a forward-only stream of rows from a data source.

一旦 Read or ReadAsync 读取该行,该行的值将全部存储在内存中,不需要任何 I/O,因此不需要异步。

更新:

原来,DbDataReader Class中有GetFieldValueAsync方法,但没有GetValueAsync方法。