@@ -168,14 +168,13 @@ async fn postgres_cancel_token() {
168168#[ cfg( feature = "mysql" ) ]  
169169#[ tokio:: test]  
170170async  fn  mysql_cancel_token ( )  { 
171-     use  std:: time:: Duration ; 
172- 
173171    use  diesel:: result:: { DatabaseErrorKind ,  Error } ; 
172+     use  std:: time:: Duration ; 
174173
175174    let  ( sender,  receiver)  = tokio:: sync:: oneshot:: channel ( ) ; 
176175
177-     // execute a long-running query on  a separate thread  
178-     let  task  = tokio :: spawn ( async  move  { 
176+     // execute a long-running query in  a separate future  
177+     let  query_future  = async  move  { 
179178        let  conn = & mut  connection ( ) . await ; 
180179        let  token = conn. cancel_token ( ) ; 
181180
@@ -187,26 +186,26 @@ async fn mysql_cancel_token() {
187186        diesel:: dsl:: sql :: < diesel:: sql_types:: Integer > ( "SELECT SLEEP(5)" ) 
188187            . load :: < i32 > ( conn) 
189188            . await 
190-     } ) ; 
191- 
192-     // wait for the cancellation token to be sent 
193-     if  let  Ok ( token)  = receiver. await  { 
194-         // give the query time to start before invoking the token 
195-         tokio:: time:: sleep ( Duration :: from_millis ( 500 ) ) . await ; 
196-         token. cancel_query ( ) . await . unwrap ( ) ; 
197-     } 
189+     } ; 
190+     let  cancel_future = async  move  { 
191+         // wait for the cancellation token to be sent 
192+         if  let  Ok ( token)  = receiver. await  { 
193+             // give the query time to start before invoking the token 
194+             tokio:: time:: sleep ( Duration :: from_millis ( 500 ) ) . await ; 
195+             token. cancel_query ( ) . await . unwrap ( ) ; 
196+         }  else  { 
197+             panic ! ( "Failed to receive cancel token" ) ; 
198+         } 
199+     } ; 
200+ 
201+     let  ( task,  _)  = tokio:: join!( query_future,  cancel_future) ; 
198202
199203    // make sure the query task resulted in a cancellation error or a return value of 1: 
200-     match  task. await . unwrap ( )  { 
201-         Err ( e)  => match  e { 
202-             Error :: DatabaseError ( DatabaseErrorKind :: Unknown ,  v) 
203-                 if  v. message ( )  == "Query execution was interrupted"  => { } 
204-             _ => panic ! ( "unexpected error: {:?}" ,  e) , 
205-         } , 
206-         Ok ( r)  => match  r[ 0 ]  { 
207-             1  => { } 
208-             _ => panic ! ( "query completed successfully without cancellation" ) , 
209-         } , 
204+     match  task { 
205+         Err ( Error :: DatabaseError ( DatabaseErrorKind :: Unknown ,  v) ) 
206+             if  v. message ( )  == "Query execution was interrupted"  => { } 
207+         Err ( e)  => panic ! ( "unexpected error: {:?}" ,  e) , 
208+         Ok ( _)  => panic ! ( "query completed successfully without cancellation" ) , 
210209    } 
211210} 
212211
0 commit comments