Dart 中的异步、同步和并发

问题描述 投票:0回答:1

根据我在dart官网上看到的,不使用async和await关键字返回Future对象的函数是同步函数,使用async和await关键字的函数是异步函数。

synchronous functions asynchronous functions

首先,我认为表达为同步函数的部分更像是异步函数,表达为异步函数的部分更像是同步函数。不阻止代码执行的同步函数似乎具有异步特性。这部分应该怎么理解?

其次,我在官网上确认了main函数是在主isolate中执行的。就“并发”而言,await函数和main函数中执行的函数如何在单线程中同时执行(我知道dart是单线程的)?在哪里以及如何可能?

我阅读了 https://dart.dev/language/concurrency 并遵循 https://dart.dev/codelabs/async-awaitn 。我也一直在搜索异步和并发关键字。

dart asynchronous async-await
1个回答
0
投票

根据我在dart官网上看到的,不使用async和await关键字返回Future对象的函数是同步函数,使用async和await关键字的函数是异步函数。

不,返回

Future
的函数是异步的,无论它是否使用
async
关键字。
async
关键字允许使用
await
关键字(
async
-
await
最初不是 Dart 语言的一部分),并自动使所有
return
语句返回
Future
。我认为你看到的例子如果断章取义的话会产生误导;它可能试图演示当您尝试从同步函数调用异步函数时会发生什么,而不是声称示例中列出的所有函数都是同步的。

不阻止代码执行的同步函数似乎具有异步特性。这部分应该怎么理解?

是的。

其次,我在官网上确认了main函数是在主isolate中执行的。就“并发”而言,await函数和main函数中执行的函数如何在单线程中同时执行(我知道dart是单线程的)?在哪里以及如何可能?

您将并发并行混为一谈。请参阅:Dart/Flutter 即使是单线程,如何并发执行代码?

© www.soinside.com 2019 - 2024. All rights reserved.