static async Task ProcessDataAsync(CsvDataReader dr) { var types = new TypeCode[dr.FieldCount]; for (int i = 0; i < types.Length; i++) { types[i] = Type.GetTypeCode(dr.GetFieldType(i)); } while (await dr.ReadAsync()) { for (int i = 0; i < dr.FieldCount; i++) { switch (types[i]) { case TypeCode.Int32: var v = dr.GetInt32(i); break; case TypeCode.Double: if (i == 4 && dr.IsDBNull(i)) { break; } var d = dr.GetDouble(i); break; case TypeCode.String: var s = dr.GetString(i); break; default: break; } } } }