Future<T> defer<T>(FutureOr<T> Function() action) { final item = _BufferItem(action); _controller.add(item); return item.future; }