iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Dart中的异步编程怎么使用
  • 160
分享到

Dart中的异步编程怎么使用

2023-07-06 02:07:57 160人浏览 泡泡鱼
摘要

这篇文章主要讲解了“dart中的异步编程怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Dart中的异步编程怎么使用”吧!一 事件循环Flutter 就是运行在一个root isola

这篇文章主要讲解了“dart中的异步编程怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Dart中的异步编程怎么使用”吧!

一 事件循环

Flutter 就是运行在一个root isolate 中

程序只要运行起来,就有一个事件循环一直在运行 ,直至程序退出。

EventLoop 先从mrcro 对列中取任务,取完任务再去 event 队列中取任务。队列任务是FIFO。

Dart中的异步编程怎么使用

二 认识Future

abstract class Future<T>

Future 是Dart 中提供的一个抽象类,泛型类,它用于封装一段在将来会被执行的代码逻辑。

Future就是异步中非常重要的角色。Future表示异步返回的结果,当执行一个异步延迟的计算时候,首先会返回一个Future结果,后续代码可以继续执行不会阻塞主isolate,当Future中的计算结果到达时,如果注册了 then 函数回调,对于返回成功的回调就会拿到最终计算的值,对于返回失败的回调就会拿到一个异常信息

1  基本使用

Flutter提供了下面三个方法,让我们来注册回调,来监听处理Future的结果。

//处理完成时候的回调,一般都是成功回调Future<R> then<R>(FutureOr<R> onValue(T value), {Function onError});//处理失败的回调,比如throw一个error就会走到这里Future<T> catchError(Function onError, {bool test(Object error)});//Future.whenComplete总是在Future完成后调用,不管Future的结果是正确的还是错误的。Future<T> whenComplete(FutureOr action());

 代码示例:

import 'dart:io'; main(List<String> args) {  // 阻塞主线程的调用  // blockMainThread();  // 异步调用  asyncMethod();} void asyncMethod() {    print("main start");  var future = getAsyncNetworkData();  future.then((String value) {    // 只有拿到结果 才会执行这里面的代码    print(value);  }).catchError((error) {    // 打印结果 Exception: 我是错误信息    print(error);  }).whenComplete(() {    // 代码走这,不管成功或者失败都会走这里    print("代码执行完毕");  });  print("main end");} Future<String> getAsyncNetworkData() {  return Future<String>(() {    sleep(Duration(seconds: 3));    // return "hello world";     // 抛出异常    throw Exception("我是错误信息");  });} void blockMainThread() {    print("main start");  var res = getNetworkData();  print(res);  print("main end");} // 模拟网络请求String getNetworkData() {  // 阻塞2秒  sleep(Duration(seconds: 2));  return "this is hello world";}

2 链式调用

  链式调用优势在于可以明确代码执行前后依赖关系以及实现异常的捕获

import 'dart:io'; main(List<String> args) {  print("main start");    // 这种方式可以解决回调地狱的问题 多个网络请求依赖也不用进行嵌套调用 直接链式调用即可  Future(() {    // 这是第一次网络请求    sleep(Duration(seconds: 2));    return "第一次网络请求的结果";  })      .then((res) {        print(res);        sleep(Duration(seconds: 2));        // 这是第二次网络请求        return "第二次网路请求的结果";      })      .then((res) {        print(res);        sleep(Duration(seconds: 2));        return "第三次网路请求的结果";      })      .then((value) => print(value))      .catchError((error) {        print(error);      });  print("main end");}

三 await 和 async

要定义异步函数,请在函数主体之前添加async关键字,他俩是配对出现的

他们是dart 语言中的关键字,最为重要的使用就是

可以让我们用同步的代码格式去实现异步的调用过程。  

大部分Future使用的场景都可以使用async-await来替代,也建议使用async-await。

下面有这样一个需求 :比如说用户登录完成之后,拿到用户的token 去请求数据,就是请求之间的依赖

用 await async 方式实现 和 Future 实现比较

import 'dart:io'; main(List<String> args) {  print("main start");  // getData();  futureMethodData();  print("main end");} // future 的实现方式futureMethodData() {  Future(() {    // 这是第一次网络请求    sleep(Duration(seconds: 2));    return "这是第一次网络请求结果";  }).then((value) {    print(value);    sleep(Duration(seconds: 2));    return value + "这是第二次网络请求结果";  }).then((value) {    print(value);    sleep(Duration(seconds: 2));    return value + "这是第三次网络请求结果";  }).then((value) {    print(value);  });} // async-await 的实现方式getData() async {  // 模拟三次网络请求    var res1 = await getNetworkData("args1");  print(res1);  var res2 = await getNetworkData(res1);  print(res2);  var res3 = await getNetworkData(res2);  print(res3);} getNetworkData(String args) {  return Future(() {    sleep(Duration(seconds: 2));    return args + "helloworld";  });}

四 isolate

isolate  可以理解为dart 中的多线程,现在设备基本都是多核CPU,可以使用isolate 充分利用硬件资源。

isolate 之间是独立的,资源不共享的。每一个isaolate 都有自己的事件循环以及队列。

1 使用

import 'dart:io';import 'dart:isolate'; main(List<String> args) async {  print("main start");  // 1  ReceivePort receivePort = ReceivePort();  // 2  spawn 返回的是future 所以要异步操作  Isolate isolate =      await Isolate.spawn<SendPort>(calculate, receivePort.sendPort);   // 可以给创建的isolate 中发送消息  receivePort.sendPort.send("这是从main isolate 发送的消息");   //3 监听创建的isolate的回调信息  receivePort.listen((message) {    print(message);    // 收到结果 关闭 kill    receivePort.close();    isolate.kill();  });   print("main end");} calculate(SendPort port) {  // 模拟耗时操作  sleep(Duration(seconds: 2));  // 回调信息  port.send("这是从创建的isolate 发送的信息");}

感谢各位的阅读,以上就是“Dart中的异步编程怎么使用”的内容了,经过本文的学习后,相信大家对Dart中的异步编程怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Dart中的异步编程怎么使用

本文链接: https://www.lsjlt.com/news/357417.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Dart中的异步编程怎么使用
    这篇文章主要讲解了“Dart中的异步编程怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Dart中的异步编程怎么使用”吧!一 事件循环flutter 就是运行在一个root isola...
    99+
    2023-07-06
  • 关于Dart中的异步编程
    一 事件循环 flutter 就是运行在一个root isolate 中 程序只要运行起来,就有一个事件循环一直在运行 ,直至程序退出。 EventLoop 先从mrcro 对列中取...
    99+
    2023-05-15
    Dart Dart异步
  • Node.js异步编程中的callback怎么用
    这篇文章主要介绍“Node.js异步编程中的callback怎么用”,在日常操作中,相信很多人在Node.js异步编程中的callback怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node.js异步...
    99+
    2023-06-17
  • JavaScript异步编程的使用
    这篇文章主要介绍“JavaScript异步编程的使用”,在日常操作中,相信很多人在JavaScript异步编程的使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaSc...
    99+
    2024-04-02
  • Python 中怎么使用Asyncio实现异步编程
    Python 中怎么使用Asyncio实现异步编程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。异步是怎么一回事在传统的顺序编程中, 所有发送给解释器的指令会一条条被执行。...
    99+
    2023-06-17
  • 怎么正确使用RabbitMQ异步编程
    这篇文章主要介绍“怎么正确使用RabbitMQ异步编程”,在日常操作中,相信很多人在怎么正确使用RabbitMQ异步编程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么正确...
    99+
    2024-04-02
  • Dart 异步编程生成器及自定义类型用法详解
    目录异步支持FutureFuture.thenFuture.catchErrorFuture.whenCompleteFuture.waitasync 和 await处理流(Stre...
    99+
    2022-11-13
    Dart 异步编程生成器 Dart 自定义类型
  • C#异步编程之async/await怎么使用
    今天小编给大家分享一下C#异步编程之async/await怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。概述异步这个...
    99+
    2023-07-05
  • 怎么使用Dart
    本篇内容介绍了“怎么使用Dart”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!下面是简单的Hello Wo...
    99+
    2024-04-02
  • 如何在ASP中使用异步编程?
    ASP.NET是一种基于Web的应用程序框架,它提供了一系列的编程模型、服务和工具,可以帮助开发人员构建强大、安全、高效的Web应用程序。在ASP.NET中,异步编程是一种非常重要的特性,它可以提高Web应用程序的性能和可伸缩性。本文将介绍...
    99+
    2023-07-27
    缓存 shell 异步编程
  • SpringBoot 中怎么实现异步编程
    这期内容当中小编将会给大家带来有关SpringBoot 中怎么实现异步编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Future 模式异步编程在处理耗时操作以及多任务...
    99+
    2024-04-02
  • 如何使用Python中的协程进行异步编程
    如何使用Python中的协程进行异步编程在传统的同步编程模型中,一个任务必须等待另一个任务完成后才能继续进行,这样会造成程序的执行效率降低。为了解决这个问题,异步编程模型应运而生。Python中的协程是一种支持异步编程的重要概念,它可以让我...
    99+
    2023-10-28
    Python 协程 异步编程
  • Java 异步编程教程:如何在http请求中使用多线程实现异步编程?
    Java是一种面向对象的编程语言,具有很好的可移植性和可扩展性,在Web开发中广泛应用。然而,由于Web应用程序需要处理大量的http请求,因此必须采用异步编程技术,以确保Web应用程序的性能和可扩展性。 在本文中,我们将介绍如何使用Ja...
    99+
    2023-06-25
    异步编程 教程 http
  • 异步编程和编程算法:如何在异步编程中使用编程算法,以提高程序效率?
    在现代编程中,异步编程已经成为了非常重要的一部分。异步编程是指在程序运行过程中,可以同时执行多个任务,而不需要等待某个任务完成后才能执行下一个任务。这种方式可以大大提高程序的效率和性能。然而,在异步编程中,如何使用编程算法来提高程序的效率则...
    99+
    2023-07-11
    异步编程 编程算法 linux
  • Python中怎么利用Asyncio实现异步编程
    本篇文章为大家展示了Python中怎么利用Asyncio实现异步编程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。异步是怎么一回事在传统的顺序编程中, 所有发送给解释器的指令会一条条被执行。此类代码...
    99+
    2023-06-17
  • C#中怎么利用AsyncResult实现异步编程
    这篇文章给大家介绍C#中怎么利用AsyncResult实现异步编程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#异步编程模式IAsyncResult概述IAsyncResult 异步设计模式通过名为 BeginOp...
    99+
    2023-06-17
  • C#怎么使用async和await实现异步编程
    这篇文章主要介绍“C#怎么使用async和await实现异步编程”,在日常操作中,相信很多人在C#怎么使用async和await实现异步编程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#怎么使用async...
    99+
    2023-07-02
  • Node.js中同步和异步编程的区别及使用方法
    目录一、进程和线程二、同步和异步同步阻塞异步问题一、进程和线程 代码编写完毕在编译的过程中计算机的内存中会开辟一个空间来存储代码,这个空间就相当于是进程,可以将进程类比于工厂的厂房,...
    99+
    2023-05-18
    Node.js中同步和异步 Node.js 同步 Node.js 异步
  • JavaScript异步编程之Promise的初步使用详解
    1. 概述 Promise对象是ES6提出的的异步编程的规范。说到异步编程,就不得不说说同步和异步这两个概念。 从字面意思理解同步编程的话,似乎指的是两个任务同步运行,如果这样理解就...
    99+
    2024-04-02
  • Java中如何使用Git进行异步编程?
    Git是一种非常流行的版本控制工具,它可以帮助开发人员更好地管理代码,协作开发和版本控制。在Java编程中,异步编程已经成为一种非常重要的技术,它可以帮助开发人员更好地处理大量的并发任务。本文将介绍如何在Java中使用Git进行异步编程。...
    99+
    2023-10-11
    git 异步编程 日志
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作