关键词:
【中文标题】我怎样才能“休眠”一个 Dart 程序【英文标题】:How can I "sleep" a Dart program 【发布时间】:2013-08-29 06:43:42 【问题描述】:我喜欢在我的 Dart 应用程序中模拟一个异步 Web 服务调用来进行测试。为了模拟这些模拟调用响应的随机性(可能是无序的),我想对我的模拟进行编程,使其在返回“未来”之前等待(睡眠)一段时间。
我该怎么做?
【问题讨论】:
【参考方案1】:2019 年版:
在异步代码中
await Future.delayed(Duration(seconds: 1));
在同步代码中
import 'dart:io';
sleep(Duration(seconds:1));
注意:这会阻塞整个进程(隔离),因此不会处理其他异步函数。它也不能在网络上使用,因为 Javascript 真的是异步的。
【讨论】:
他们两个有什么区别(sleep vs Future.delayed)?在这两种情况下,幕后发生了什么?sleep()
完全阻止了整个隔离区。 Dart 代码在睡眠时根本不会运行。它可能编译成类似于 C++ 的std::this_thread::sleep_for
。 Future.delayed()
安排异步函数稍后恢复,但随后它将控制权返回给 Dart 事件循环,以便其他异步函数可以继续运行。【参考方案2】:
您还可以使用 Future.delayed 工厂在延迟后完成未来。下面是两个函数在延迟后异步返回字符串的示例:
import 'dart:async';
Future sleep1()
return new Future.delayed(const Duration(seconds: 1), () => "1");
Future sleep2()
return new Future.delayed(const Duration(seconds: 2), () => "2");
【讨论】:
() => "1"
的目的是什么?
我猜没用,它只是一个占位符来做你的计算
要让你的应用使用这些函数休眠,你需要使用 await:await sleep1();
【参考方案3】:
它并不总是你想要的(有时你想要Future.delayed
),但如果你真的想在你的 Dart 命令行应用程序中睡觉,你可以使用 dart:io 的sleep()
:
import 'dart:io';
main()
sleep(const Duration(seconds:1));
【讨论】:
好!不幸的是,在官方网站上很难找到这些信息。 'dart:io' 库在构建 Web 应用程序时不可用 来自文档:请谨慎使用,因为在 [sleep] 调用中阻塞时,无法在隔离中处理异步操作。 警告:这是同步的!!!它将停止主线程! (我很傻,我做了await sleep()
并期望其他工作在睡眠期间运行:(
他们两个有什么区别(sleep vs Future.delayed)?在这两种情况下,幕后发生了什么?【参考方案4】:
我发现Dart中有几种实现可以让代码延迟执行:
new Future.delayed(const Duration(seconds: 1)); //recommend
new Timer(const Duration(seconds: 1), ()=>print("1 second later."));
sleep(const Duration(seconds: 1)); //import 'dart:io';
new Stream.periodic(const Duration(seconds: 1), (_) => print("1 second later.")).first.then((_)=>print("Also 1 second later."));
//new Stream.periodic(const Duration(seconds: 1)).first.then((_)=>print("Also 1 second later."));
【讨论】:
【参考方案5】:对于 Dart 2+ 语法,在异步函数上下文中:
import 'package:meta/meta.dart'; //for @required annotation
void main() async
void justWait(@required int numberOfSeconds) async
await Future.delayed(Duration(seconds: numberOfSeconds));
await justWait(numberOfSeconds: 5);
【讨论】:
【参考方案6】:这是一个有用的模拟,可以带一个可选参数来模拟错误:
Future _mockService([dynamic error])
return new Future.delayed(const Duration(seconds: 2), ()
if (error != null)
throw error;
);
你可以这样使用它:
await _mockService(new Exception('network error'));
【讨论】:
如何让 Dart 程序“休眠”1.6 秒
】如何让Dart程序“休眠”1.6秒【英文标题】:Howcani"sleep"aDartPorgramfor1.6seconds【发布时间】:2021-06-2104:16:22【问题描述】:是否可以在Dart中指定一个double值作为睡眠值?例如:sleep(Duration(seconds:1.6));【问题讨论】:你不应... 查看详情
休眠:必须重新启动 Java 应用程序才能重新加载数据
】休眠:必须重新启动Java应用程序才能重新加载数据【英文标题】:Hibernate:JavaApplicationmustberestartedfordatatoberealoaded【发布时间】:2010-12-2519:35:49【问题描述】:我正在编写一个JSP/JSFWeb应用程序,目前正在使用Hibernate(和MySQL)... 查看详情
休眠列名问题
...th”的列,而不是Hibernate给我一个名为date_of_birth的列。我怎样才能改变这个?有web.xml属性吗?我遇到了Defaul 查看详情
我怎样才能在我的 django 应用程序中显示一个图标?
】我怎样才能在我的django应用程序中显示一个图标?【英文标题】:HowcanIgetafavicontoshowupinmydjangoapp?【发布时间】:2014-03-2304:19:11【问题描述】:我只想将favicon.ico放到我的staticfiles目录中,然后让它显示在我的应用程序中。我怎... 查看详情
我怎样才能让这个程序也打印列表中的第一个条目?
】我怎样才能让这个程序也打印列表中的第一个条目?【英文标题】:HowcanIgetthisprogramtoalsoprintthefirstentryinthelisttoo?【发布时间】:2009-01-1919:42:08【问题描述】:我无法显示查询中返回多个答案的第一个条目。例如,结果集为5的... 查看详情
你如何在 Dart 中打印美元符号 $
...print("Ihave$dollars.");//Ihave42.我希望输出是:我有42美元。我怎样才能做到这一点?谢谢。【问题讨论】:你试过print( 查看详情
vscode 中的 dart.closingLabels 问题
...只是一个普通的文本。你可以看到结束标签是纯文本,我怎样才能改变它的字体颜色和样式?我试图查看dart扩展设置,但在那里找不到任何设置。这是clos 查看详情
我怎样才能把这个聊天机器人变成一个扫描用户输入的数组
】我怎样才能把这个聊天机器人变成一个扫描用户输入的数组【英文标题】:Howcaniturnthischatterbotintoanarraythatscansuserinput【发布时间】:2018-03-2623:01:26【问题描述】:嘿,所以基本上我有一个任务来制作一个简单的聊天机器人,他... 查看详情
我怎样才能让一个有角度的应用程序(嵌入在不同的网站上)一直跨越到页面的底部
】我怎样才能让一个有角度的应用程序(嵌入在不同的网站上)一直跨越到页面的底部【英文标题】:howcanimakeanangularapp(embededondiffrentsites)spanallthewaytothebottomofthepage【发布时间】:2021-11-2211:29:51【问题描述】:我使用嵌入客户网... 查看详情
UITableView - 我怎样才能直接从一个项目的视图移动到另一个?
】UITableView-我怎样才能直接从一个项目的视图移动到另一个?【英文标题】:UITableView-howcanImovestraightfromoneitem\'sviewtoanother?【发布时间】:2011-05-1909:34:39【问题描述】:我的应用程序的一部分是笔记部分,有点像iPhone的内置笔记... 查看详情
我怎样才能继承 ByteBuffer?
】我怎样才能继承ByteBuffer?【英文标题】:howcanIsubclassByteBuffer?【发布时间】:2011-10-1017:20:08【问题描述】:所以JavaNIO架构师没有做一个ByteBuffer接口,而是一个ByteBufferclass,它不是最终类,但它没有包公共构造函数,因此它不... 查看详情
我怎样才能在角度递归
】我怎样才能在角度递归【英文标题】:howcanimakerecursiveinangular【发布时间】:2019-01-0111:04:23【问题描述】:我做了一个小程序,它应该根据给定的数组长度通过API顺序获取数据。我有一个按钮,单击时会遍历数组。这里是Angular... 查看详情
我怎样才能在这个程序中得到正确的输出?
】我怎样才能在这个程序中得到正确的输出?【英文标题】:HowcanIgetthecorrectoutputinthisprogram?【发布时间】:2022-01-0617:06:58【问题描述】:(1)提示用户输入两个单词和一个数字,将每个单词存储到单独的变量中。然后,将这三个... 查看详情
为啥应用程序在 iPhone 模拟器中崩溃;我怎样才能解决这个问题?
】为啥应用程序在iPhone模拟器中崩溃;我怎样才能解决这个问题?【英文标题】:WhyisappcrashinginiPhonesimulator;howcanIfixthis?为什么应用程序在iPhone模拟器中崩溃;我怎样才能解决这个问题?【发布时间】:2010-11-0721:47:20【问题描述... 查看详情
我怎样才能呈现一个模态视图控制器,并带有默认的关闭动画?
】我怎样才能呈现一个模态视图控制器,并带有默认的关闭动画?【英文标题】:HowcanIpresentamodalViewControllerwiththedefaultsegueanimationofdismissingone?【发布时间】:2013-05-3016:02:30【问题描述】:在我的应用程序中,我会在应用程序第一... 查看详情
我怎样才能找到程序停滞的原因?(代码片段)
...类似的东西追踪原因。但它没有崩溃,它默默地停止。我怎样才能找到原因?答案从你的描述-程序默默地停止-我知道你的程序简单而优雅地退出,但不是从你预期的流程。这可能由于多种原因而发生-例如,您的程序可能会进入... 查看详情
我怎样才能让我的程序等待输入,而不是在循环中
】我怎样才能让我的程序等待输入,而不是在循环中【英文标题】:HowcanIhavemyprogramwaitforinput,withoutbeinginaloop【发布时间】:2013-03-1020:04:35【问题描述】:我正在编写一个Pygame程序,它需要用户输入来编写音乐。它等待特定事件... 查看详情
在 UIViewController 我怎样才能有一个方法自动处理很多按钮
】在UIViewController我怎样才能有一个方法自动处理很多按钮【英文标题】:InUIViewControllerhowcanIhaveasinglemethodautomaticallyhandlealotofbuttons【发布时间】:2011-10-1203:21:29【问题描述】:我有一个UIViewController用于iPad应用程序,用户可以通... 查看详情