@@ -22,7 +22,6 @@ type Payload = (TaskIdentifier, async_task::Runnable);
22
22
pub struct TickedAsyncExecutor < O > {
23
23
channel : ( mpsc:: Sender < Payload > , mpsc:: Receiver < Payload > ) ,
24
24
num_woken_tasks : Arc < AtomicUsize > ,
25
-
26
25
num_spawned_tasks : Arc < AtomicUsize > ,
27
26
28
27
// TODO, Or we need a Single Producer - Multi Consumer channel i.e Broadcast channel
53
52
}
54
53
}
55
54
55
+ pub fn spawn < T > (
56
+ & self ,
57
+ identifier : impl Into < TaskIdentifier > ,
58
+ future : impl Future < Output = T > + Send + ' static ,
59
+ ) -> Task < T >
60
+ where
61
+ T : Send + ' static ,
62
+ {
63
+ let identifier = identifier. into ( ) ;
64
+ let future = self . droppable_future ( identifier. clone ( ) , future) ;
65
+ let schedule = self . runnable_schedule_cb ( identifier) ;
66
+ let ( runnable, task) = async_task:: spawn ( future, schedule) ;
67
+ runnable. schedule ( ) ;
68
+ task
69
+ }
70
+
56
71
pub fn spawn_local < T > (
57
72
& self ,
58
73
identifier : impl Into < TaskIdentifier > ,
@@ -157,7 +172,7 @@ mod tests {
157
172
fn test_multiple_tasks ( ) {
158
173
let executor = TickedAsyncExecutor :: default ( ) ;
159
174
executor
160
- . spawn_local ( "A" , async move {
175
+ . spawn ( "A" , async move {
161
176
tokio:: task:: yield_now ( ) . await ;
162
177
} )
163
178
. detach ( ) ;
@@ -211,6 +226,15 @@ mod tests {
211
226
fn test_ticked_timer ( ) {
212
227
let executor = TickedAsyncExecutor :: default ( ) ;
213
228
229
+ for _ in 0 ..10 {
230
+ let timer: TickedTimer = executor. create_timer ( ) ;
231
+ executor
232
+ . spawn ( "ThreadedTimer" , async move {
233
+ timer. sleep_for ( 256.0 ) . await ;
234
+ } )
235
+ . detach ( ) ;
236
+ }
237
+
214
238
for _ in 0 ..10 {
215
239
let timer = executor. create_timer ( ) ;
216
240
executor
@@ -231,30 +255,25 @@ mod tests {
231
255
let elapsed = now. elapsed ( ) ;
232
256
println ! ( "Elapsed: {:?}" , elapsed) ;
233
257
println ! ( "Total: {:?}" , instances) ;
234
- println ! (
235
- "Min: {:?}, Max: {:?}" ,
236
- instances. iter( ) . min( ) ,
237
- instances. iter( ) . max( )
238
- ) ;
239
258
240
259
// Test Timer cancellation
241
260
let timer = executor. create_timer ( ) ;
242
261
executor
243
- . spawn_local ( "LocalFuture1 ", async move {
262
+ . spawn ( "ThreadedFuture ", async move {
244
263
timer. sleep_for ( 1000.0 ) . await ;
245
264
} )
246
265
. detach ( ) ;
247
266
248
267
let timer = executor. create_timer ( ) ;
249
268
executor
250
- . spawn_local ( "LocalFuture2 " , async move {
269
+ . spawn_local ( "LocalFuture " , async move {
251
270
timer. sleep_for ( 1000.0 ) . await ;
252
271
} )
253
272
. detach ( ) ;
254
273
255
274
let mut tick_event = executor. tick_channel ( ) ;
256
275
executor
257
- . spawn_local ( "LocalTickFuture1 ", async move {
276
+ . spawn ( "ThreadedTickFuture ", async move {
258
277
loop {
259
278
let _r = tick_event. changed ( ) . await ;
260
279
if _r. is_err ( ) {
@@ -266,7 +285,7 @@ mod tests {
266
285
267
286
let mut tick_event = executor. tick_channel ( ) ;
268
287
executor
269
- . spawn_local ( "LocalTickFuture2 " , async move {
288
+ . spawn_local ( "LocalTickFuture " , async move {
270
289
loop {
271
290
let _r = tick_event. changed ( ) . await ;
272
291
if _r. is_err ( ) {
0 commit comments