我有一个通用阅读器,我想将它从同步转换为异步。
原始代码是
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 而无法正常工作
GetFieldValueAsync
无法从用法中推断方法“ ”的类型参数。尝试明确指定类型参数。
我也尝试指定类型, 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)
返回像同步对应对象这样的对象?
小记,题外话
如果有人坚持要知道我为什么要为十进制编写不同的代码,这就是问题所在。