Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Background Executor

The background executor allows you to spawn asynchronous tasks onto background threads.

Accessing the Background Executor

The background_executor returns a reference to the platform BackgroundExecutor.

use gpui::{AppContext, Application};

fn main() {
    Application::new().run(|app| {
        let background_executor = app.background_executor();
    });
}

Spawn

The spawn function takes a Future and enqueues it to run on a background thread, a Task<T> is returned. When this task is dropped it will be cancelled immediatley. Using detach on a Task<T> allows it to run to completion.

use gpui::Application;

fn main() {
    Application::new().run(|app| {
        app.background_executor()
            .spawn(async {
                // Some asynchronous work
            })
            .detach();
    });
}

Timer

The timer function takes a Duration and returns a Task<()> that will complete after the elapsed duration. This task can then be awaited in a future.

use std::time::Duration;

use gpui::Application;

fn main() {
    Application::new().run(|app| {
        let timer = app.background_executor().timer(Duration::from_secs(10));

        app.background_executor()
            .spawn(async {
                timer.await;
                println!("Timer Finished!");
            })
            .detach();
    });
}