Dart语言学习日记(九)

异步

Future

Future表示在将来某时获取一个值的方式,当一个返回Future方法被调用时,该方法会把要执行的某事件放入队列,并返回一个未完成的Future对象,在该事件执行完毕后,Future对象的状态会自动变成已经完成,此时可以通过then链式调用或async和await获取该事件的返回值,并对返回值进行相应处理。

例:定义1个从指定文件异步读出文件内容的方法,并将文件内容输出。

1.异步读文件

Dart语言中通过File对象的readAsSting()方法异步读取文件,该方法返回的一个Future<String>对象,Future有一个then方法,该方法如下:

Future<R> then<R>(
	FutureOr<R> onValue(
		T value
	),{
	Function onError
}); 

2.同步读文件

Dart语言中同样也提供了同步读文件机制,即调用File类的同步读文件方法readAsStringSync()读文件时,需要等文件读完后才能执行后面的功能模块。

例:定义1个从指定文件同步读出文件内容的方法,并将文件内容输出。
(1)定义readFileSync()方法

String readFileSync(String filePath){
	File file = File(filePath);
	return file.readAsStringSync();
}

(2)定义main()方法

void main(){
	print('start');
	String info = readFileSync("temp/info.txt");
	print(info);			//输出读出的文件内容
	print('end');
}

async和await

Dart语言中提供了async和await机制,让异步任务的执行看起来和同步代码的执行顺序一致。

async用来表示定义的方法是异步执行的,该方法会返回一个Future对象;await后面也是一个Future对象,表示该异步任务完成,只有异步任务执行完成后才会继续执行后面的任务代码。

async的作用就是标记一个方法是异步方法;await的作用是等待异步任务的结果。

例:用async和await机制实现异步读文件,并产生如前例所示输出效果:

void mian() async {
	print('start');
	String info = await reaFile("temp/info.txt");
	print(info);
	print('end');
}

使用async和await实现代码异步执行机制包含以下四个要点:
(1)await只能在标记了async的异步方法中使用,否则报错;
(2)当使用async作为方法名后缀声明时,说明这个方法的返回值是一个Future类型;
(3)当执行到该方法中用await标注的代码时,会暂停该方法其他部分的代码执行;
(4)当await标注的代码引用的Future类型返回值执行完成,await标注的代码后的下一行代码会立即执行。

Stream

Stream和Future是Dart语言实现异步处理机制的核心API,用Future实现异步处理时,所有异步操作的返回值都是有Future表示,但是Future只能表示一次异步获得的数据,而Stream实现异步事件流的处理,它表示多次异步获得的数据。

采用Stream方式读文件内容时,一般情况下每次可以读取一部分数据,并进行相应的处理。

例:定义1个用Stream方式从指定文件读出文件内容的方法,并将文件内容输出。

openRead()方法返回一个Sream<List<int>>类型的数据,也就是一个存放了int类型数组的数据流。在获得一个Stream实例对象后,就是通过listen()方法订阅Stream上发出的数据(即事件),有事件发出时就会通知订阅者进行相应的事件处理。listen()方法如下:

StreamSubscription<T> listen(
	void onData(T event),
	{
		Function onError,
		void onDone(),
		bool cancelOnError}
);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LuoYaNiiii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值