```rust
let (tx, rx) = batch_channel::unbounded();
tx.send(value).unwrap();
tx.send_iter([v1, v2, v3]).unwrap();
match rx.recv().await {
Some(value) => println!("single {value}"),
None => return "sender closed",
}
let batch = rx.recv_batch(100).await;
// batch.is_empty() means sender closed
```