diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-07-01 18:00:14 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-02 00:00:14 +0000 |
commit | e746b6d80654ba4e4e26370fe6e4f784ce841d92 (patch) | |
tree | 153ffad92a96126b9ab8e906dcdabf7648755931 /core/examples/schedule_task.rs | |
parent | b9c0e7cd550ab14fa7da7e33ed87cbeeeb9785a0 (diff) |
refactor(core): Extract deno_core (#19658)
`deno_core` is moving out! You'll find it at
https://github.com/denoland/deno_core/ once this PR lands.
Diffstat (limited to 'core/examples/schedule_task.rs')
-rw-r--r-- | core/examples/schedule_task.rs | 69 |
1 files changed, 0 insertions, 69 deletions
diff --git a/core/examples/schedule_task.rs b/core/examples/schedule_task.rs deleted file mode 100644 index 348ba7666..000000000 --- a/core/examples/schedule_task.rs +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -use deno_core::anyhow::Error; -use deno_core::op; -use deno_core::Extension; -use deno_core::JsRuntime; -use deno_core::OpState; -use deno_core::RuntimeOptions; -use futures::channel::mpsc; -use futures::stream::StreamExt; -use std::task::Poll; - -// This is a hack to make the `#[op]` macro work with -// deno_core examples. -// You can remove this: -use deno_core::*; - -type Task = Box<dyn FnOnce()>; - -fn main() { - let my_ext = Extension::builder("my_ext") - .ops(vec![op_schedule_task::decl()]) - .event_loop_middleware(|state_rc, cx| { - let mut state = state_rc.borrow_mut(); - let recv = state.borrow_mut::<mpsc::UnboundedReceiver<Task>>(); - let mut ref_loop = false; - while let Poll::Ready(Some(call)) = recv.poll_next_unpin(cx) { - call(); - ref_loop = true; // `call` can callback into runtime and schedule new callbacks :-) - } - ref_loop - }) - .state(move |state| { - let (tx, rx) = mpsc::unbounded::<Task>(); - state.put(tx); - state.put(rx); - }) - .build(); - - // Initialize a runtime instance - let mut js_runtime = JsRuntime::new(RuntimeOptions { - extensions: vec![my_ext], - ..Default::default() - }); - let runtime = tokio::runtime::Builder::new_current_thread() - .enable_all() - .build() - .unwrap(); - - let future = async move { - // Schedule 10 tasks. - js_runtime - .execute_script_static( - "<usage>", - r#"for (let i = 1; i <= 10; i++) Deno.core.ops.op_schedule_task(i);"#, - ) - .unwrap(); - js_runtime.run_event_loop(false).await - }; - runtime.block_on(future).unwrap(); -} - -#[op] -fn op_schedule_task(state: &mut OpState, i: u8) -> Result<(), Error> { - let tx = state.borrow_mut::<mpsc::UnboundedSender<Task>>(); - tx.unbounded_send(Box::new(move || println!("Hello, world! x{i}"))) - .expect("unbounded_send failed"); - Ok(()) -} |