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 对象表示异步操作。

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

技术教程推荐

DevOps实战笔记 -〔石雪峰〕

OAuth 2.0实战课 -〔王新栋〕

动态规划面试宝典 -〔卢誉声〕

Spark核心原理与实战 -〔王磊〕

手把手带你搭建秒杀系统 -〔佘志东〕

PyTorch深度学习实战 -〔方远〕

中间件核心技术与实战 -〔丁威〕

Serverless进阶实战课 -〔静远〕

后端工程师的高阶面经 -〔邓明〕

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