首页 > 解决方案 > 我在 onData 中有一个带有暂停操作的 Dart StreamSubscription。事件是否可以在回调和暂停之间开始?

问题描述

我正在尝试让回调同步启动和解决。


fiveSeconds() async {
  print("Start fiveSeconds");
  print("1");
  await Future.delayed(Duration(seconds: 1));
  print("2");
  await Future.delayed(Duration(seconds: 1));
  print("3");
  await Future.delayed(Duration(seconds: 1));
  print("4");
  await Future.delayed(Duration(seconds: 1));
  print("5");
  await Future.delayed(Duration(seconds: 1));
  print("End fiveSeconds");
}

twoSeconds() async {
  print("Start twoSeconds");
  print("1");
  await Future.delayed(Duration(seconds: 1));
  print("2");
  await Future.delayed(Duration(seconds: 1));
  print("End twoSeconds");
}


profileStreamSubscription.onData((message) async {
      profileStreamSubscription.pause();
      if (message == "send") {
        await fiveSeconds();
        profileStreamSubscription.resume();
      }
      if (message == "send2") {
        await twoSeconds();
        profileStreamSubscription.resume();
      }
    });

这个函数的输出应该是这样的:

调用fiveSeconds,调用twoSeconds,它们按顺序同步解析。

Start fiveSeconds
1
2
3
4
5
End fiveSeconds
Start twoSeconds
1
2
End twoSeconds

不是这个,vv 是没有 pause() 或 resume() 的 StreamSubscription 将返回的内容:

调用fiveSeconds,调用twoSeconds,它们同时解决。

Start fiveSeconds
Start twoSeconds
1
1
2
2
End twoSeconds
3
4
5
End fiveSeconds

profileStreamSubscription.onData((message) async {假设在暂停操作发生之前和profileStreamSubscription.pause();开始另一个事件之间会发生 onData 事件 吗?

这将返回如下内容:

调用fiveSeconds,twoSeconds在暂停之前中断fiveSeconds,同步解决但顺序错误。

Start twoSeconds
1
2
End twoSeconds
Start fiveSeconds
1
2
3
4
5
End fiveSeconds

标签: flutterdartasynchronousdart-async

解决方案


推荐阅读