バグが発生しているかどうかわからない、または動作しないとわからない。だから私はこの例外を解決しようとしていたMySql.Data.MySqlClient.MySqlException: 'There is already an open DataReader associated with this Connection which must be closed first.'
と私は何が起こっているかを見るためにデバッグセッションを開始しました。私が見たものは私の頭ではかなり計算されていません(添付のスクリーンショットを参照)。Reader()でClose()を呼び出した後にMySqlDataReaderが閉じない
reader.Close()
を呼び出した後、プロパティIsClosed
はfalseのままで、.Close()
(直前のウィンドウ内)への繰り返し呼び出しはそれを変更しません。
これは予期された動作で、私の問題は他の場所か、これはバグと例外の原因ですか?
これは.NET標準をサポートする唯一のものであるMySql.Data
v6.10.3-rc(nuget.orgから)を使用している場合に発生します。また、このコードは.NET Core 2.0アプリケーションにコンパイルされています。
UPD:周囲にはタスクがありますが、リーダーはメインスレッドのみで作業します。またreader
はDbDataReader
と宣言され、MySqlDataReader
が継承されます。
UPD2:明らかに、私が((MySql.Data.MySqlClient.MySqlDataReader)reader).Close()
と呼ぶと、読者は正しく閉じます。コネクタにバグがあり、仮想メソッドをどのように使用しているかのように思えます。右?
あなたは非同期タスク内にいますか? – apomene
@apomeneいいえ、タスクの外側では、通常のシングルスレッドコードです。周囲にはタスクがありますが、読者から取り出されたデータだけを読者に対処しません。 – bazzilic
'reader.Dispose()'を呼び出すとどうなりますか?それは処分されますか? – waka