summaryrefslogtreecommitdiff
path: root/core/examples/schedule_task.rs
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2023-07-01 18:00:14 -0600
committerGitHub <noreply@github.com>2023-07-02 00:00:14 +0000
commite746b6d80654ba4e4e26370fe6e4f784ce841d92 (patch)
tree153ffad92a96126b9ab8e906dcdabf7648755931 /core/examples/schedule_task.rs
parentb9c0e7cd550ab14fa7da7e33ed87cbeeeb9785a0 (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.rs69
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(())
-}