Skip to content

MultiStreamController.onResume is never called? #56927

@sgrekhov

Description

@sgrekhov

Why `onResume callback in the code below in not called?

import "dart:async";
import "../../../Utils/expect.dart";

main() {
  asyncStart(2);
  var stream = Stream<int>.multi((controller) {
    Expect.isNull(controller.onResume);
    controller.onPause = () {
      print("onPause"); // prints
    };
    controller.onResume = () {
      print("onResume"); // is not printed
    };
    controller.add(1);
    controller.add(2);
    controller.add(3);
    controller.close();
  });
  listen(stream);
  listen(stream);
}

void listen(Stream<int> stream) {
  late StreamSubscription ss;
  int i = 0;
  ss = stream.listen((v) {
    Expect.equals(++i, v);
    if (i == 1) {
      ss.pause();
      Future.delayed(Duration(milliseconds: 100), () {
        ss.resume();
      });
    }
  }, onDone: asyncEnd);
}

The output is

unittest-suite-wait-for-done
onPause
onPause
unittest-suite-success

cc @lrhn

Dart SDK version: 3.7.0-27.0.dev (dev) (Tue Oct 15 17:02:51 2024 -0700) on "windows_x64"

Metadata

Metadata

Assignees

No one assigned

    Labels

    area-core-librarySDK core library issues (core, async, ...); use area-vm or area-web for platform specific libraries.library-asynctype-questionA question about expected behavior or functionality

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions