Skip to content

Commit d68258d

Browse files
authored
Fix issue #50 (#52)
1 parent d33434c commit d68258d

File tree

1 file changed

+17
-24
lines changed

1 file changed

+17
-24
lines changed

concurrency/src/tasks/time.rs

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use std::time::Duration;
44
use spawned_rt::tasks::{self as rt, CancellationToken, JoinHandle};
55

66
use super::{GenServer, GenServerHandle};
7+
use core::pin::pin;
78

89
pub 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

Comments
 (0)