DART:如何编写耗时的函数以返回Future

云母

我必须编写一个耗时的函数,如果准备好了,它将返回一个Future。下面的方法是否正确,还是我的第9行中耗时的算法阻塞了程序,直到准备就绪。在这种情况下,我该怎么做,才能将控制权交还给事件循环,或者还有什么解决方案?

Future<int> timeconsumingFunctionReturningFuture(int i) {
  var completer = new Completer();

  if (i==0) { 
    completer.completeError(88);
    return completer.future;
  } else {
    int rc;
    // Line9: rc = timeconsuming algorithm, to calculate rc
    completer.complete(rc);
    return completer.future;
  }
}

Tnx Micha

贡特·佐克鲍尔

您的代码可能无法按预期方式工作,因为算法可能会阻止完成程序的返回。尝试这种方式:

Future<int> timeconsumingFunctionReturningFuture(int i) {
  var completer = new Completer();

  if (i==0) { 
    completer.completeError(88);
  } else {
    Timer.run(() {
      int rc;
      // Line9: rc = timeconsuming algorithm, to calculate rc
      completer.complete(rc);
    });
  }
  return completer.future;
}

这样,您的耗时算法将异步运行,并且将来会立即返回。

我自己没有尝试过,但是这个较短的版本也可以使用(无需创建完成程序)

return new Future.delayed(Duration.ZERO, () {
    // timeconsuming algorithm
  });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何编写Java函数以返回动态类型的数组?

编写函数以返回节点的位置

如何编写返回 impl Future 的函数指针的签名?

如何编写函数以运行函数并返回唯一命名的外部作用域变量?

Dart:如何返回Future <void>

如何编写此迭代函数以递归?

如何编写一个函数以在Fortran中返回分配的共享内存数组?

如何编写链函数 DART?

Python:编写函数以检查列表并返回值或无

编写函数以从 Json Obj 返回“列”数组

如何在Powershell中编写函数以创建函数

如何构造函数以返回承诺

如何使用malloc()函数以返回数组?

如何编写函数以返回OCaml中给定集合中具有k个元素的所有子集?

在Dart中,如何将函数传递为返回Future的参数

如何从Dart中的函数返回Future或任何其他类型

Haskell编写自己的函数以编写函数

如何编写函数以在调查中取平均值?

如何编写这些函数以使用forEach()语句?

如何编写pandas或dask函数以获取以下输出?

如何编写通用函数以在 C 中重用

如何编写扩展函数以在Kotlin中实例化AndroidViewModel?

如何编写函数以动态查询熊猫数据框?

如何编写JavaScript函数以检查JRE版本

如何编写函数以在OCaml中创建列表的循环版本?

如何编写函数以获取树状结构的输出

如何编写Go函数以接受不同的结构?

如何编写constexpr交换函数以更改整数的字节序?

如何编写SQL函数以减少代码重复