@@ -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