@@ -168,14 +168,13 @@ async fn postgres_cancel_token() {
168
168
#[ cfg( feature = "mysql" ) ]
169
169
#[ tokio:: test]
170
170
async fn mysql_cancel_token ( ) {
171
- use std:: time:: Duration ;
172
-
173
171
use diesel:: result:: { DatabaseErrorKind , Error } ;
172
+ use std:: time:: Duration ;
174
173
175
174
let ( sender, receiver) = tokio:: sync:: oneshot:: channel ( ) ;
176
175
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 {
179
178
let conn = & mut connection ( ) . await ;
180
179
let token = conn. cancel_token ( ) ;
181
180
@@ -187,26 +186,26 @@ async fn mysql_cancel_token() {
187
186
diesel:: dsl:: sql :: < diesel:: sql_types:: Integer > ( "SELECT SLEEP(5)" )
188
187
. load :: < i32 > ( conn)
189
188
. 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 ( 100 ) ) . 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) ;
198
202
199
203
// 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" ) ,
210
209
}
211
210
}
212
211
0 commit comments