# error[E0277]: `std::rc::Rc<()>` cannot be sent between threads safely

`Rc<()>` is not `Send` because `Rc` is not `Send`

- **ID:** `rust/e0277-async-fn-not-send`
- **Domain:** rust
- **Category:** type_error
- **Error Code:** `E0277`
- **Verification:** ai_generated
- **Fix Rate:** 90%

## Root Cause

Using `Rc` inside an async block or future that is expected to implement `Send`, typically when spawning a task with `tokio::spawn`.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| rustc 1.75 | active | — | — |
| tokio 1.35 | active | — | — |

## Workarounds

1. **Replace `Rc` with `Arc` (atomic reference counting) and `RefCell` with `Mutex` or `RwLock`.** (95% success)
   ```
   Replace `Rc` with `Arc` (atomic reference counting) and `RefCell` with `Mutex` or `RwLock`.
   ```
2. **Use `tokio::task::LocalSet` to spawn non-Send futures on the current thread if you must keep `Rc`.** (85% success)
   ```
   Use `tokio::task::LocalSet` to spawn non-Send futures on the current thread if you must keep `Rc`.
   ```

## Dead Ends

- **** — `Mutex<Rc>` still doesn't make `Rc` `Send`; `Rc` is fundamentally not thread-safe. You need `Arc` instead. (75% fail)
- **** — Unsafe to implement `Send` for `Rc`; leads to data races and undefined behavior. (90% fail)
