我怎样才能“休眠”一个 Dart 程序

     2023-02-26     169

关键词:

【中文标题】我怎样才能“休眠”一个 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_forFuture.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应用程序,用户可以通... 查看详情