Dart语言教程:同步和异步

2019-06-2217:45:00编程语言入门到精通Comments5,904 views字数 1748阅读模式

异步操作在线程中执行,与主应用程序线程分开。当应用程序调用方法异步执行操作时,应用程序可以在异步方法执行其任务时继续执行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

下面通过一个例子来理解这个概念。在示例程序中使用IO库接受用户输入。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

import 'dart:io'; 
void main() { 
   print("Enter your name :");            

   // prompt for user input 
   String name = stdin.readLineSync();  

   // this is a synchronous method that reads user input 
   print("Hello Mr. ${name}"); 
   print("End of main"); 
}
Dart

readLineSync()是一种同步方法。它将阻止执行readLineSync()函数调用之后的所有指令,直到readLineSync()方法完成执行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

stdin.readLineSync等待输入。它停止执行并且在收到用户输入之前不再执行任何操作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

以上示例将产生以下输出 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

Enter your name :     
Maxsu                   

// reads user input  
Hello Mr. Maxsu 
End of main
Dart

在计算中,当某个事件在继续之前等待事件发生时,它是同步的。这种方法的一个缺点是,如果代码的一部分花费太长时间来执行,则后续的块虽然不相关,但会阻止暂停执行。考虑一个必须响应多个资源请求的Web服务器。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

同步执行模型将阻止每个其他用户的请求,直到它完成当前请求的处理。在这种情况下,与Web服务器的情况一样,每个请求必须独立于其他请求。Web服务器在响应其他用户的请求之前不应等待当前请求完成执行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

简而言之,在完成先前用户的请求之前,它应该接受来自新用户的请求。称为异步。异步编程基本上意味着没有等待或非阻塞编程模型。dart:async包有助于在Dart脚本中实现异步编程块。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

以下示例更好地说明了异步块的功能。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

第1步 - 创建如下所示的contact.txt文件,并将其保存在当前项目的数据文件夹中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

1, One 
2, Two 
3, Three 
4, Four
Txt

第2步 - 编写一个程序,它将读取文件而不会阻塞应用程序的其他部分。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

import "dart:async"; 
import "dart:io";  

void main(){ 
   File file = new File( Directory.current.path+"\\data\\contact.txt"); 
   Future<String> f = file.readAsString();  

   // returns a futrue, this is Async method 
   f.then((data)=>print(data));  

   // once file is read , call back method is invoked  
   print("End of main");  
   // this get printed first, showing fileReading is non blocking or async 
}
Dart

上面程序输出以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

End of main 
1, One 
2, Two 
3, Three 
4, Four
Shell

当脚本继续读取文件时,首先执行“main of main"Future类是dart:async的一部分,用于在异步任务完成后获取计算结果。然后,此Future值用于在计算完成后执行某些操作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

当读取操作完成,执行控制就在then()内传送。这是因为读取操作可能需要更多时间,因此不希望阻止程序的其他部分。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

Dart Future

Dart社区将Future定义为“在未来的某个时间获取值的手段”。简单地说,Future对象是一种表示由表达式返回的值的机制,该表达式的执行将在稍后的时间点完成。当调用异步方法时,Dart的几个内置类返回Future文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

Dart是一种单线程编程语言。如果代码阻塞执行的线程(例如,通过等待耗时的操作或阻塞I/O),程序将有效地冻结。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

异步操作可让程序运行而不会被阻止。Dart使用Future对象来表示异步操作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/dart/dart_programming_async.html#article-start文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13772.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/13772.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定