Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

StreamGroup close never completes unless removed first #372

Open
curt-weber opened this issue Jun 25, 2024 · 1 comment
Open

StreamGroup close never completes unless removed first #372

curt-weber opened this issue Jun 25, 2024 · 1 comment

Comments

@curt-weber
Copy link

StreamGroup close documentation states that it will close when streams in the group close, but this doesn't appear to be the case:

import 'dart:async';
import 'package:async/async.dart';

Future<void> main() async {
  final controller = StreamController.broadcast();
  final group = StreamGroup.broadcast();
  group.add(controller.stream);
  await controller.close();
  print('controller closed');
  await group.close();
  print('never');
}

The above will close properly if the controllers stream is removed before calling close. Am I missing something?

@mosuem mosuem transferred this issue from dart-archive/async Oct 16, 2024
suojae added a commit to suojae/core that referenced this issue Apr 2, 2025
@suojae
Copy link

suojae commented Apr 2, 2025

I've looked into this issue. With the current implementation, when using StreamGroup.broadcast(), the group.close() method doesn't complete when streams in the group are closed. While the documentation states that stream will close once all streams in the group close, it actually only completes if streams are explicitly removed.

I've added a test case and implemented a solution that properly detects when broadcast streams close. Please check out my PR that addresses this issue. 🙌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants