我有一个 Dart StreamSubscription,在 onData 中有一个暂停操作事件是否有可能在回调和暂停之间开始?

问题描述

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


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 会返回的:

调用五个秒,调用两个秒,它们同时解析。

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

假设 onData 事件可能发生在 profileStreamSubscription.onData((message) async {profileStreamSubscription.pause(); 在暂停操作发生之前启动另一个事件?

这将返回如下内容

调用fiveSeconds,twoSeconds在暂停前中断5Seconds,同步解析但顺序错误

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...