Skip to main content

MicrotaskQueue

Struct MicrotaskQueue 

Source
pub struct MicrotaskQueue { /* private fields */ }
Expand description

The microtask queue — drained completely after each macrotask.

Like Chrome’s microtask queue in V8::MicrotaskQueue / Blink’s EventLoop::PerformMicrotaskCheckpoint().

§Spec behavior

“If the microtask queue is not empty:

  1. Let oldestMicrotask be the result of dequeuing from microtask queue.
  2. Set event loop’s currently running task to oldestMicrotask.
  3. Run oldestMicrotask.
  4. Set event loop’s currently running task back to null.
  5. Go to step 1.“

Key: microtasks enqueued DURING drain are also drained in the same cycle.

Implementations§

Source§

impl MicrotaskQueue

Source

pub fn new() -> Self

Create an empty microtask queue.

Source

pub fn enqueue(&mut self, microtask: Microtask)

Enqueue a microtask.

If called during drain(), the new microtask will be processed in the same drain cycle.

Source

pub fn queue_microtask(&mut self, callback: impl FnOnce() + 'static)

Convenience: enqueue a closure as a microtask.

Source

pub fn drain(&mut self) -> usize

Drain the microtask queue completely (microtask checkpoint).

Runs all microtasks, including any new ones enqueued during drain. Returns the number of microtasks executed.

§Re-entrancy

This takes microtasks one at a time via pop_front(). If a microtask enqueues more, they appear at the back and will be processed before drain() returns. To prevent infinite loops from buggy user code, a safety limit is enforced.

Source

pub fn len(&self) -> usize

Number of pending microtasks.

Source

pub fn is_empty(&self) -> bool

Whether the microtask queue is empty.

Trait Implementations§

Source§

impl Default for MicrotaskQueue

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.