私はMS referenceでDbDataReader(DbCommand)のコードを見ていますが、ReadAsync()メソッドでは非同期なものがわかりません。System.Data.Common.DbDataReader.ReadAsyncのasyncとは何ですか?
virtual public Task<bool> ReadAsync(CancellationToken cancellationToken) {
if (cancellationToken.IsCancellationRequested) {
return ADP.CreatedTaskWithCancellation<bool>();
}
else {
try {
return Read() ? ADP.TrueTask : ADP.FalseTask;
}
catch (Exception e) {
return ADP.CreatedTaskWithException<bool>(e);
}
}
}
ReadAsyncメソッドは、Readメソッドを呼び出して完全なタスクを返します。 これは、呼び出しを直接呼び出しているのと同じ方法で呼び出しスレッドをブロックしませんか?
私はDbCommand ExecuteReaderAsyncと他のメソッドで同じパターンに気付きました。彼らは同期バージョンを呼び出し、完了したタスクを返します。
私はここで何が欠けていますか?
UPDATE:@PeterBonsがうまく説明されているので、何も見逃さなかった(the documentationでも)。私はまだそれが好きではありませんが、それは私の問題です。
いくつかのプロバイダ(一般的なプロバイダを含む)は、データベースとの実際の非同期通信をサポートしていないため、この実装を継承しています。そうした人は、実際の実装を上書きして提供します。はい、これらのメソッドを抽象化することもできますが、これをサポートしていないプロバイダには、独自の偽装実装を提供しないようにする別の設計決定が行われました。 – Evk