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