Dart - 异步(Async)

Dart - 异步(Async) 首页 / Dart入门教程 / Dart - 异步(Async)

异步操作在与 main 应用程序线程分开的线程中执行,当应用程序调用方法以异步执行操作时,该应用程序可以在异步方法执行其任务的同时继续执行。

让我们举一个示例来理解这个概念。在此,程序使用 IO库接受用户输入。

import 'dart:io'; 
void main() { 
   print("Enter your name :");            
   
   //提示用户输入
   String name=stdin.readLineSync();  
   
   //这是一个读取用户输入的同步方法
   print("Hello Mr. ${name}"); 
   print("End of main"); 
} 

readLineSync()    是一种同步方法,这意味着在 readLineSync()方法完成执行之前,将阻止执行 readLineSync()之后的所有指令。

stdin.readLineSync 等待输入,直到收到用户输入后才执行。

上面的示例将导致以下输出 -

Enter your name :     
Learnfk                   

//reads user input  
Hello Mr. Learnfk 
End of main

简而言之,在必须完成先前用户的请求之前,它应该接受新用户的请求,这称为异步,异步编程基本上意味着没有等待或无阻塞的编程模型, dart:async 包有助于在Dart脚本中实现异步编程块。

无涯教程网

Async - 示例

以下示例更好地说明了异步块的函数。

步骤1     -    按照所示创建 contact.txt 文件,并将其保存在当前项目的数据文件夹中。

1, Learnfk 
2, John 
3, Tim 
4, Jane 

步骤2    -    编写一个程序,该程序将在不阻止应用程序其他部分的情况下读取文件。

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 
}

该程序的输出如下-

End of main 
1, Learnfk 
2, John 
3, Tim 
4, Jan

在脚本继续读取文件的同时,首先执行" main of end",dut:async 的一部分 Future 类用于在异步任务完成后获取计算输出,然后,该 Future 值将在计算完成后用于执行某些操作。

读取操作完成后,将在" then()" 中转移执行控制,这是因为读取操作可能会花费更多时间,所以它不想阻塞程序的其他部分。

Async - Dart Future

Dart社区将 Future 定义为"一种在将来某个时候获得价值的手段"。简而言之,Future对象是一种表示表达式返回值的机制,该表达式的执行将在以后的某个时间点完成,当调用异步方法时,Dart的多个内置类将返回 Future

Dart是一种单线程编程语言,如果有任何代码阻塞了执行线程(如,通过等待耗时的操作或阻塞了I/O),则程序将有效冻结。

异步操作使您的程序运行而不会被阻塞, Dart使用Future 对象表示异步操作。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

玩转Git三剑客 -〔苏玲〕

.NET Core开发实战 -〔肖伟宇〕

正则表达式入门课 -〔涂伟忠〕

分布式系统案例课 -〔杨波〕

Linux内核技术实战课 -〔邵亚方〕

实用密码学 -〔范学雷〕

小马哥讲Spring AOP编程思想 -〔小马哥〕

基于人因的用户体验设计课 -〔刘石〕

PPT设计进阶 · 从基础操作到高级创意 -〔李金宝(Bobbie)〕

好记忆不如烂笔头。留下您的足迹吧 :)