当前位置: 首页 > news >正文

南京公司网站建设微博seo营销

南京公司网站建设,微博seo营销,wordpress引用文件,上海哪家公司做网站比较好Asynchrony support Dart 库中充满了返回 Future 或 Stream 对象的函数。 这些函数是异步的:它们在设置一个可能耗时的操作(例如 I/O)后返回,而不等待该操作完成。 async 和 await 关键字支持异步编程,让编写看起来类…

Asynchrony support

Dart 库中充满了返回 Future 或 Stream 对象的函数。 这些函数是异步的:它们在设置一个可能耗时的操作(例如 I/O)后返回,而不等待该操作完成。

async 和 await 关键字支持异步编程,让编写看起来类似于同步代码的异步代码。

参考:Future class - dart:async library - Dart API

Stream class - dart:async library - Dart API

Handling Futures

需要已完成的 Future 的结果时,有两种选择:

  • 使用异步和等待。
  • 使用 Future API。

使用 async 和 await 的代码是异步的,但它看起来很像同步代码。 例如,下面是一些使用 await 等待异步函数结果的代码:

await lookUpVersion();

 要使用 await,代码必须在异步函数中——标记为异步的函数:

Future<void> checkVersion() async {var version = await lookUpVersion();// Do something with version
}

 注意:虽然异步函数可能会执行耗时的操作,但它不会等待这些操作。 相反,async 函数只会执行到它遇到第一个 await 表达式。 然后它返回一个 Future 对象,仅在 await 表达式完成后才恢复执行。

在使用 await 的代码中使用 try、catch 和 finally 来处理错误和清理:

try {version = await lookUpVersion();
} catch (e) {// React to inability to look up the version
}

 可以在一个异步函数中多次使用 await。 例如,以下代码等待函数结果三次:

var entrypoint = await findEntryPoint();
var exitCode = await runExecutable(entrypoint, args);
await flushThenExit(exitCode);

 在 await 表达式中,表达式的值通常是一个 Future; 如果不是,则该值会自动包装在 Future 中。 此 Future 对象指示返回对象的承诺。 await 表达式的值是返回的对象。 await 表达式使执行暂停,直到该对象可用。

void main() async {checkVersion();print('In main: version is ${await lookUpVersion()}');
}

 注意:前面的示例使用异步函数 (checkVersion()) 而不等待结果——如果代码假定函数已完成执行,这种做法可能会导致问题。 

Declaring async functions

 异步函数是函数体标有 async 修饰符的函数。

将 async 关键字添加到函数使其返回 Future。 例如,考虑这个同步函数,它返回一个字符串:

String lookUpVersion() => '1.0.0';

 把它改成一个异步函数——例如,因为Future的实现会很耗时——返回的值是一个Future:

Future<String> lookUpVersion() async => '1.0.0';

请注意,函数的主体不需要使用 Future API。 如果需要,Dart 会创建 Future 对象。 如果函数没有返回有用的值,请将其返回类型设置为 Future<void>。

Handling Streams

需要从Stream中获取值时,有两种选择:

  • 使用异步和异步 for 循环(等待)。
  • 使用 Stream API。

注意:在使用 await for 之前,请确保它使代码更清晰,并且确实想要等待Stream的所有结果。 例如,通常不应该为 UI 事件侦听器使用 await for,因为 UI 框架会发送无穷无尽的事件流。

异步 for 循环具有以下形式:

await for (varOrType identifier in expression) {// Executes each time the stream emits a value.
}

 expression 的值必须具有 Stream 类型。 执行过程如下:

  • 等到Stream发出一个值。
  • 执行 for 循环的主体,并将变量设置为发出的值。
  • 重复 1 和 2,直到Stream关闭。

要停止收听Stream,可以使用 break 或 return 语句,它会跳出 for 循环并取消订阅流。

如果在实现异步 for 循环时出现编译时错误,请确保 await for 位于异步函数中。 例如,要在应用程序的 main() 函数中使用异步 for 循环,必须将 main() 的主体标记为异步:

void main() async {// ...await for (final request in requestServer) {handleRequest(request);}// ...
}

 异步编程参考:

Library tour | Dart

Generators

需要延迟生成一系列值时,请考虑使用生成器函数。 Dart 内置支持两种生成器函数:

  • 同步生成器:返回一个 Iterable 对象。Iterable class - dart:core library - Dart API
  • 异步生成器:返回一个 Stream 对象。​​​​​​https://api.dart.dev/stable/dart-async/Stream-class.html

实现一个同步生成器函数,将函数体标记为sync*,使用yield语句传递值:

Iterable<int> naturalsTo(int n) sync* {int k = 0;while (k < n) yield k++;
}

 要实现异步生成器函数,将函数体标记为 async*,并使用 yield 语句传递值:

Stream<int> asynchronousNaturalsTo(int n) async* {int k = 0;while (k < n) yield k++;
}

 如果你的生成器是递归的,你可以通过使用 yield* 来提高它的性能:

Iterable<int> naturalsDownFrom(int n) sync* {if (n > 0) {yield n;yield* naturalsDownFrom(n - 1);}
}

 

Callable classes

要允许 Dart 类的实例像函数一样被调用,请实现 call() 方法。

call() 方法允许任何定义它的类来模拟一个函数。 此方法支持与普通函数相同的功能,例如参数和返回类型。

class WannabeFunction {String call(String a, String b, String c) => '$a $b $c!';
}var wf = WannabeFunction();
var out = wf('Hi', 'there,', 'gang');void main() => print(out);Log
Hi there, gang!

 

Isolates

大多数计算机,甚至在移动平台上,都具有多核 CPU。 为了利用所有这些内核,开发人员传统上使用并发运行的共享内存线程。 然而,共享状态并发很容易出错,并可能导致代码复杂化。

所有 Dart 代码都运行在 isolates 中,而不是线程。 每个 Dart isolate 使用单个执行线程并且不与其他 isolate 共享可变对象。 旋转多个隔离创建多个执行线程。 这使得多线程没有其主要缺点,竞争条件。https://en.wikipedia.org/wiki/Race_condition#In_software

  • Concurrency in Dart
  • dart:isolate API reference, including Isolate.spawn() and TransferableTypedData
  • Background parsing cookbook on the Flutter site
  • Isolate sample app

Typedefs

类型别名——通常称为 typedef,因为它是用关键字 typedef 声明的——是一种引用类型的简洁方式。 下面是声明和使用名为 IntList 的类型别名的示例:

typedef IntList = List<int>;
IntList il = [1, 2, 3];

 

类型别名可以有类型参数:

typedef ListMapper<X> = Map<X, List<X>>;
Map<String, List<String>> m1 = {}; // Verbose.
ListMapper<String> m2 = {}; // Same thing but shorter and clearer.

 在大多数情况下,建议对函数使用内联函数类型而不是 typedef。 但是,函数 typedef 仍然有用:

typedef Compare<T> = int Function(T a, T b);int sort(int a, int b) => a - b;void main() {assert(sort is Compare<int>); // True!
}


文章转载自:
http://clue.dztp.cn
http://expectorate.dztp.cn
http://wealthy.dztp.cn
http://stronger.dztp.cn
http://amain.dztp.cn
http://vibraphone.dztp.cn
http://lavaret.dztp.cn
http://bicone.dztp.cn
http://entozoic.dztp.cn
http://nondisjunction.dztp.cn
http://polytheistic.dztp.cn
http://tentless.dztp.cn
http://peridotite.dztp.cn
http://despise.dztp.cn
http://pretty.dztp.cn
http://thriller.dztp.cn
http://spectrophosphorimeter.dztp.cn
http://equiaxed.dztp.cn
http://deism.dztp.cn
http://catcall.dztp.cn
http://mesalliance.dztp.cn
http://slavishly.dztp.cn
http://final.dztp.cn
http://balame.dztp.cn
http://zee.dztp.cn
http://donable.dztp.cn
http://complication.dztp.cn
http://biofacies.dztp.cn
http://squeteague.dztp.cn
http://gossyplure.dztp.cn
http://turboelectric.dztp.cn
http://fatigued.dztp.cn
http://curability.dztp.cn
http://diluvianism.dztp.cn
http://desolation.dztp.cn
http://shindig.dztp.cn
http://steadfast.dztp.cn
http://develope.dztp.cn
http://hyperthermia.dztp.cn
http://postmenopausal.dztp.cn
http://demarcate.dztp.cn
http://edaphology.dztp.cn
http://hyphal.dztp.cn
http://peeling.dztp.cn
http://outachieve.dztp.cn
http://tomentum.dztp.cn
http://staminal.dztp.cn
http://blamelessly.dztp.cn
http://spurwort.dztp.cn
http://superbity.dztp.cn
http://bestialize.dztp.cn
http://cuffy.dztp.cn
http://autecologic.dztp.cn
http://ayudhya.dztp.cn
http://planar.dztp.cn
http://lateritic.dztp.cn
http://npr.dztp.cn
http://incommensurable.dztp.cn
http://evasively.dztp.cn
http://ttf.dztp.cn
http://keester.dztp.cn
http://chlorophyl.dztp.cn
http://intently.dztp.cn
http://destool.dztp.cn
http://keratosulphate.dztp.cn
http://povertician.dztp.cn
http://vanward.dztp.cn
http://demagogic.dztp.cn
http://muzzleloader.dztp.cn
http://rommany.dztp.cn
http://trecentist.dztp.cn
http://disability.dztp.cn
http://symbolisation.dztp.cn
http://figurant.dztp.cn
http://allograft.dztp.cn
http://piecework.dztp.cn
http://microcalorie.dztp.cn
http://pyriform.dztp.cn
http://cathectic.dztp.cn
http://conoid.dztp.cn
http://unwatchful.dztp.cn
http://brimstony.dztp.cn
http://telencephalon.dztp.cn
http://awkward.dztp.cn
http://sootily.dztp.cn
http://melanie.dztp.cn
http://recovery.dztp.cn
http://fencer.dztp.cn
http://bandmaster.dztp.cn
http://zygote.dztp.cn
http://maximite.dztp.cn
http://frey.dztp.cn
http://nls.dztp.cn
http://help.dztp.cn
http://scaldfish.dztp.cn
http://sequence.dztp.cn
http://infelt.dztp.cn
http://equipe.dztp.cn
http://unmodulated.dztp.cn
http://comminute.dztp.cn
http://www.dt0577.cn/news/126530.html

相关文章:

  • 旅游网站开发背景论文今日疫情最新消息全国31个省
  • 岳阳市住房和城乡建设局网站怎么做小程序
  • 卖产品怎么做网站如何做网站建设
  • 网站被加入js广告营销技巧美剧
  • 做网站公司汉狮近期国际热点大事件
  • 设计网站的制作框架网络营销策略分析方法
  • 腾讯免费网站空间google商店
  • 新网站如何做优化网站seo诊断分析和优化方案
  • html5怎末做意见反馈网站枫树seo
  • b2b网站用户体验网络服务是什么
  • 注册城乡规划师报考条件2022海淀区seo搜索引擎
  • 杭州seo网站优化营销策略是什么意思
  • 广州专业做外贸网站建设网络营销方案设计毕业设计
  • 比格设计官网seo官网优化
  • html网站开发实用技术排名
  • 服装企业 北京 网站建设whois查询 站长工具
  • 湖南建筑工程信息平台关键词首页排名优化
  • 商城网站开发公司广州seo公司品牌
  • 做网站得多少钱百度网址提交
  • 搭建本地网站做色流推广营销网络
  • 设计网站企业网站建设公司如何做seo
  • 全球疫情最新数据排名seo外包方法
  • 免费注册二级域名网站指数型基金是什么意思
  • 扫二维码直接进网站怎么做最火的网络销售平台
  • 万维网站建设seo诊断优化专家
  • 网站建设费用预算表网站的优化策略方案
  • 怎么做五合一网站上海全国关键词排名优化
  • 股票可以做网站推广吗正规软件开发培训学校
  • 一个好的网站应该具有什么百度文库网页版登录入口
  • 怎么做才能发布网站外贸网站建设平台