私は次のコードの平和を持っています:
IAsyncResult beginExecuteReader = command.BeginExecuteNonQuery();
while (!beginExecuteReader.IsCompleted)
{
if (controllerTask.CancellationTokenSource.IsCancellationRequested)
{
command.Cancel();
}
Thread.Sleep(100);
}
try
{
result = command.EndExecuteNonQuery(beginExecuteReader);
}
catch (SqlException exception)
{
if (exception.ErrorCode == OperationCanceled)
{
throw new OperationCanceledException();
}
throw;
}
キャッチされた例外が操作のキャンセルによって発生したことを特定するにはどうすればよいですか。この場合、ExecuteNonQuery はエラー コード 0x80131904 で例外をスローしますが、これは非常に一般的な例外であり、さまざまな理由で発生する可能性があります。エラー メッセージは次のようになります: {"現在のコマンドで重大なエラーが発生しました。結果がある場合は破棄する必要があります。\r\n操作はユーザーによってキャンセルされました。"}
エラーメッセージの解析以外のオプションが表示されません...何かアイデアはありますか?
ありがとう
PS。ええ、.NET 2.0 では MSDN に警告がありましたが、.NET 4.0 ではこの警告が削除されたため、asyncronyc 操作の Cancel コマンドはおそらく最良のアイデアではないことを知っています。また、cancel メソッドが別のスレッドから呼び出されたときの別の実装も好きではありません。私にとっては、コードがより難しくなるからです。