8

我正在使用一个小型 Web 服务器,我正在使用该async包实现一个版本,一个同步版本在单独的隔离中执行每个请求。我想简单地将文件流通过管道传输到HttpResponse,但我不能同步地做到这一点。而且我找不到同步等待Stream和等待的方法。Future我现在使用的是一个可行的方法RandomAccessFile,但它变得更加混乱。

一种解决方案是执行定期计时器来检查未来是否完成(通过设置布尔值或类似值),但这绝对不是我想要使用的东西。

有没有办法同步等待 aFuture和 a Stream?如果不是,为什么?

4

2 回答 2

2

对于未来来这里的访问者,他们只是想在 Future 或 Stream 完成后执行一些任务,请使用awaitasyncawait for方法。

未来

final myInt = await getFutureInt();

溪流

int mySum = 0;
await for (int someInt in myIntStream) {
  mySum += someInt;
}

笔记

这在技术上可能与执行同步任务不同,但它实现了在完成一项任务之前完成另一项任务的目标。

于 2020-03-20T09:46:51.783 回答
1

AFAIK 没有办法同步等待 Future 或 Stream。为什么?因为这些在定义上几乎都是异步的,而且正如您所发现的,API 的设计考虑了异步行为。

有几个 Future 构造函数Future.value()Future.sync(), 会立即执行,但我认为这些可能不是您的想法。

于 2013-07-25T17:44:02.510 回答