同步的等待未来或流在Dart中完成的同步的
我正在玩一个小型web服务器,我正在使用同步的等待未来或流在Dart中完成的同步的,dart,Dart,我正在玩一个小型web服务器,我正在使用async包实现一个版本,一个同步版本在一个单独的文件中执行每个请求。我只想通过管道将一个文件流传输到HttpResponse,但我无法同步完成。我找不到一种方法来同步等待流和未来。我现在使用的是一个RandomAccessFile,它可以工作,但会变得更混乱 一种解决方案是执行一个定期计时器来检查未来是否完成(通过设置布尔值或类似值),但这绝对不是我想要使用的 有没有办法同步等待未来和流?如果没有,原因是什么?AFAIK没有同步等待未来或流的方法。为什么
async
包实现一个版本,一个同步版本在一个单独的文件中执行每个请求。我只想通过管道将一个文件流传输到HttpResponse
,但我无法同步完成。我找不到一种方法来同步等待流
和未来
。我现在使用的是一个RandomAccessFile
,它可以工作,但会变得更混乱
一种解决方案是执行一个定期计时器来检查未来是否完成(通过设置布尔值或类似值),但这绝对不是我想要使用的
有没有办法同步等待
未来
和流
?如果没有,原因是什么?AFAIK没有同步等待未来或流的方法。为什么?因为它们在定义上是异步的,正如您所发现的,这些API在设计时考虑了异步行为
有两个将来的构造函数,
Future.value()
和Future.sync()
,它们会立即执行,但我认为这些可能不是您想要的。对于将来来这里的访问者来说,他们只是想在未来或流完成后执行一些任务,在异步方法中使用wait
和wait for
未来
流动
注
这在技术上可能不同于执行同步任务,但它实现了在执行另一个任务之前先完成一个任务的目标。确保它们是异步的,但如果我想在单独的隔离中使用流,有很好的理由等待完成。异步代码更为复杂。考虑到API的存在,DART团队希望为同步编程提供良好的基础。在将来的情况下,一个简单的
T get({timeout:Duration})
就可以做到这一点。溪流需要更多的水。因此,从定义上说它们是异步的并不能解释这一点。“异步代码更复杂”——完全同意。有时你确实需要等待一些事情完成后才能继续。我想我在讨论中读到,这是有计划的,但需要一些时间。另见
final myInt = await getFutureInt();
int mySum = 0;
await for (int someInt in myIntStream) {
mySum += someInt;
}