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

Foreground Executor

The foreground executor allows you to spawn asynchronous tasks on the main thread.

When spawning tasks using the foreground executor it is vital to not run operations that may block for any non-trivial duration, doing so will block the main thread which will block the entire application.

Accessing the Foreground Executor

The foreground_executor returns a reference to the platform ForegroundExecutor.

use gpui::{AppContext, Application};

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

Spawn

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

The App::spawn function may alternatively be used as a shorthand that also supplies AsyncApp as a paramater of the async closure.

use gpui::Application;

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