···6666}
6767```
68686969+#### Graceful Shutdown
7070+7171+Use `await using` for graceful async shutdown. The pool exposes a `signal` that fires when disposal begins — thread it into tasks for cooperative cancellation.
7272+7373+```ts
7474+{
7575+ await using run = workers(4);
7676+7777+ run(longTask(run.signal)); // task can react to abort
7878+ run(otherTask()); // runs to completion
7979+}
8080+// signal fired, waited for both tasks, then workers terminated
8181+```
8282+8383+Use `using` (without `await`) for immediate termination, same as before.
8484+8585+A `shutdownTimeout` option force-terminates workers if graceful shutdown takes too long:
8686+8787+```ts
8888+{
8989+ await using run = workers(4, { shutdownTimeout: 5000 });
9090+ // ...
9191+}
9292+```
9393+6994### Dedicated Workers
70957196Awaiting a task directly (without a pool) runs it on a dedicated worker thread, one per moroutine function.