Document why `ForegroundExecutor` is `!Send` (#25492)

Michael Sloan created

Release Notes:

- N/A

Change summary

crates/gpui/src/executor.rs | 5 +++++
1 file changed, 5 insertions(+)

Detailed changes

crates/gpui/src/executor.rs 🔗

@@ -35,6 +35,11 @@ pub struct BackgroundExecutor {
 
 /// A pointer to the executor that is currently running,
 /// for spawning tasks on the main thread.
+///
+/// This is intentionally `!Send` via the `not_send` marker field. This is because
+/// `ForegroundExecutor::spawn` does not require `Send` but checks at runtime that the future is
+/// only polled from the same thread it was spawned from. These checks would fail when spawning
+/// foreground tasks from from background threads.
 #[derive(Clone)]
 pub struct ForegroundExecutor {
     #[doc(hidden)]