我不太确定我是否遇到错误,或者我没有弄清它应该如何工作。所以最近我一直试图解决这个异常MySql.Data.MySqlClient.MySqlException: 'There is already an open DataReader associated with this Connection which must be closed first.'
,我开始了一个调试会话,看看发生了什么。我看到的并不完全在我脑海中计算(见附件截图)。在读取器上调用Close()后,MySqlDataReader不会关闭
在我致电reader.Close()
后,IsClosed
属性保持为false,并且重复调用.Close()
(在直接窗口中)不会改变该属性。
这是预期的行为,我的问题是在别的地方,或者这是一个错误和异常的原因?
在使用MySql.Data
v6.10.3-rc(来自nuget.org)时,会发生这种情况,它是目前唯一支持.NET标准的版本。此外,代码被编译为.NET Core 2.0应用程序。
UPD:有一些任务,但读者只能从主线程工作。另外,reader
被宣告为DbDataReader
,从中继承MySqlDataReader
。
UPD2:显然,如果我打电话给((MySql.Data.MySqlClient.MySqlDataReader)reader).Close()
,那么阅读器会正常关闭。在我看来,就像连接器中的一个错误,以及他们如何使用虚拟方法。对?
你是否在一个异步任务? – apomene
@apomene Nope,任务外,正常的单线程代码。有任务,但他们没有处理读者,只有从读者的数据。 – bazzilic
如果您调用'reader.Dispose()',会发生什么?它是否被处置? – waka