我正在try 设计一个接口来抽象不应该直接从UI中使用的长时间运行的操作.为了抽象它,我创建了一个抽象类,其中只有一个方法可以执行这样的操作:

abstract class MakeSomething {

  Result make(Param param);

}

但是,我不能将其标记为async(try 将其放在签名之前、返回类型之前和分号之前).这是可能的吗?如果是的话,是怎么做的?

推荐答案

async函数几乎总是必须返回Future.(一个不常见的例外是,async个函数的返回类型可能为void,即"fire and forget";在这种情况下,函数完成时没有自动通知调用方的方法.)

如果希望make函数是异步的,并向调用者提供Result,那么它必须返回Future<Result>.

请注意,async不是函数的类型签名的一部分;async是函数体中enables the use of await的上下文关键字.这意味着async在声明抽象接口时不是很有用.重要的是函数返回Future,派生类可以 Select 是否使用async/await实现该函数.

Dart相关问答推荐

捕获一个区域中的所有期货

Dart - 检测未完成的期货

polymer.dart 中的@observable 和@published 有什么区别?

为什么 StatefulWidget 的路由创建失败?

Flutter:Firebase 基本查询或基本搜索代码

flutter pub run build_runner 卡住了

使用 headers 和 body 进行 HTTP Post

在 Flutter 中将图像与左上角对齐

通常由 TextField 创建的 InputDecorator 不能具有无限宽度

如何将 Stream 转换为 List

Flutter-当文本字段有焦点时隐藏提示文本

Flutter 使用什么 colored颜色 系统,为什么我们使用 `const Color` 而不是 `new Color`

什么时候在 Dart 中使用 num

如何在 Dart 中将字符串转换为 utf8?

Dart 中的抽象基类

Dart,对泛型的限制?

用一个 catch 表达式在 Dart 中捕获多种特定的异常类型

Dart null / false / empty checking:如何写这个更短?

Dart 空值判断习惯用法或最佳实践是什么?

如何用 Dart 格式化日期?