wasm-mt-pool

Docs | GitHub | Crate

A thread pool library based on wasm-mt.

Getting started

Requirements:

Cargo.toml:

wasm-mt-pool = "0.1" serde = { version = "1.0", features = ["derive"] } serde_closure = "0.2"

Usage

```

![feature(async_closure)]

use wasmmtpool::prelude::*; use wasmmt::utils::{consoleln, sleep};

let size = 2; let pkgjs = "./pkg/poolexec.js"; // path to wasm-bindgen's JS binding let pool = ThreadPool::new(size, pkgjs).andinit().await.unwrap();

let num = 4;

consoleln!("a) 🔥 poolexec! {} closures:", num); for _ in 0..num { poolexec!(pool, move || { consoleln!("a) closure: done."); Ok(JsValue::NULL) }); }

consoleln!("b) 🔥 poolexec! {} async closures:", num); for _ in 0..num { poolexec!(pool, async move || { sleep(1000).await; consoleln!("b) async closure: done."); Ok(JsValue::NULL) }); }

let cb = move |result| { console_ln!("callback: result: {:?}", result); };

consoleln!("c) 🔥 poolexec! {} closures with callback:", num); for _ in 0..num { poolexec!(pool, move || { consoleln!("c) closure: done."); Ok(JsValue::from("C")) }, cb); }

consoleln!("d) 🔥 poolexec! {} async closures with callback:", num); for _ in 0..num { poolexec!(pool, async move || { sleep(1000).await; consoleln!("d) async closure: done."); Ok(JsValue::from("D")) }, cb); }

sleep(6000).await; // Do sleep long enough to ensure all jobs are completed. asserteq!(pool.countpendingjobs(), 0); ```