@@ -224,6 +224,43 @@ public async Task OpenAsync_WhenCancelTokenIsCanceled_ThrowYdbException()
224224 ( await Assert . ThrowsAsync < YdbException > ( async ( ) => await connection . OpenAsync ( cts . Token ) ) ) . Message ) ;
225225 }
226226
227+ [ Fact ]
228+ public async Task YdbCommand_WhenCancelTokenIsCanceled_ThrowYdbException ( )
229+ {
230+ await using var connection = await CreateOpenConnectionAsync ( ) ;
231+ var command = new YdbCommand ( connection ) { CommandText = "SELECT 1; SELECT 1; SELECT 1;" } ;
232+ var ydbDataReader = await command . ExecuteReaderAsync ( ) ;
233+ using var cts = new CancellationTokenSource ( ) ;
234+ cts . Cancel ( ) ;
235+
236+ await ydbDataReader . ReadAsync ( cts . Token ) ; // first part in memory
237+ Assert . False ( ydbDataReader . IsClosed ) ;
238+ Assert . Equal ( 1 , ydbDataReader . GetValue ( 0 ) ) ;
239+
240+ Assert . Equal ( StatusCode . Cancelled , ( await Assert . ThrowsAsync < YdbException > (
241+ async ( ) => await ydbDataReader . NextResultAsync ( cts . Token ) ) ) . Code ) ;
242+ Assert . True ( ydbDataReader . IsClosed ) ;
243+ Assert . Equal ( StatusCode . Cancelled , ( await Assert . ThrowsAsync < YdbException > (
244+ async ( ) => await command . ExecuteReaderAsync ( cts . Token ) ) ) . Code ) ;
245+ Assert . Equal ( StatusCode . Cancelled , ( await Assert . ThrowsAsync < YdbException > (
246+ async ( ) => await command . ExecuteScalarAsync ( cts . Token ) ) ) . Code ) ;
247+ Assert . Equal ( StatusCode . Cancelled , ( await Assert . ThrowsAsync < YdbException > (
248+ async ( ) => await command . ExecuteNonQueryAsync ( cts . Token ) ) ) . Code ) ;
249+
250+ // ReSharper disable once MethodSupportsCancellation
251+ ydbDataReader = await command . ExecuteReaderAsync ( ) ;
252+ // ReSharper disable once MethodSupportsCancellation
253+ await ydbDataReader . NextResultAsync ( ) ;
254+ await ydbDataReader . ReadAsync ( cts . Token ) ;
255+ Assert . False ( ydbDataReader . IsClosed ) ;
256+ Assert . Equal ( 1 , ydbDataReader . GetValue ( 0 ) ) ;
257+ Assert . False ( ydbDataReader . IsClosed ) ;
258+
259+ Assert . Equal ( StatusCode . Cancelled , ( await Assert . ThrowsAsync < YdbException > (
260+ async ( ) => await ydbDataReader . NextResultAsync ( cts . Token ) ) ) . Code ) ;
261+ Assert . True ( ydbDataReader . IsClosed ) ;
262+ }
263+
227264 private List < Task > GenerateTasks ( ) => Enumerable . Range ( 0 , 100 ) . Select ( async i =>
228265 {
229266 await using var connection = await CreateOpenConnectionAsync ( ) ;
0 commit comments