@@ -4,6 +4,7 @@ use std::time::Duration;
44use spawned_rt:: tasks:: { self as rt, CancellationToken , JoinHandle } ;
55
66use super :: { GenServer , GenServerHandle } ;
7+ use core:: pin:: pin;
78
89pub struct TimerHandle {
910 pub join_handle : JoinHandle < ( ) > ,
@@ -25,19 +26,15 @@ where
2526 let gen_server_cancellation_token = handle. cancellation_token ( ) ;
2627 let join_handle = rt:: spawn ( async move {
2728 // Timer action is ignored if it was either cancelled or the associated GenServer is no longer running.
28- let cancel_conditions = select (
29- Box :: pin ( cloned_token. cancelled ( ) ) ,
30- Box :: pin ( gen_server_cancellation_token. cancelled ( ) ) ,
31- ) ;
29+ let cancel_token_fut = pin ! ( cloned_token. cancelled( ) ) ;
30+ let genserver_cancel_fut = pin ! ( gen_server_cancellation_token. cancelled( ) ) ;
31+ let cancel_conditions = select ( cancel_token_fut, genserver_cancel_fut) ;
3232
33- let _ = select (
34- cancel_conditions,
35- Box :: pin ( async {
36- rt:: sleep ( period) . await ;
37- let _ = handle. cast ( message. clone ( ) ) . await ;
38- } ) ,
39- )
40- . await ;
33+ let async_block = pin ! ( async {
34+ rt:: sleep( period) . await ;
35+ let _ = handle. cast( message. clone( ) ) . await ;
36+ } ) ;
37+ let _ = select ( cancel_conditions, async_block) . await ;
4138 } ) ;
4239 TimerHandle {
4340 join_handle,
@@ -60,19 +57,15 @@ where
6057 let join_handle = rt:: spawn ( async move {
6158 loop {
6259 // Timer action is ignored if it was either cancelled or the associated GenServer is no longer running.
63- let cancel_conditions = select (
64- Box :: pin ( cloned_token. cancelled ( ) ) ,
65- Box :: pin ( gen_server_cancellation_token. cancelled ( ) ) ,
66- ) ;
60+ let cancel_token_fut = pin ! ( cloned_token. cancelled( ) ) ;
61+ let genserver_cancel_fut = pin ! ( gen_server_cancellation_token. cancelled( ) ) ;
62+ let cancel_conditions = select ( cancel_token_fut, genserver_cancel_fut) ;
6763
68- let result = select (
69- Box :: pin ( cancel_conditions) ,
70- Box :: pin ( async {
71- rt:: sleep ( period) . await ;
72- let _ = handle. cast ( message. clone ( ) ) . await ;
73- } ) ,
74- )
75- . await ;
64+ let async_block = pin ! ( async {
65+ rt:: sleep( period) . await ;
66+ let _ = handle. cast( message. clone( ) ) . await ;
67+ } ) ;
68+ let result = select ( cancel_conditions, async_block) . await ;
7669 match result {
7770 futures:: future:: Either :: Left ( _) => break ,
7871 futures:: future:: Either :: Right ( _) => ( ) ,
0 commit comments