Dart:异步抽象方法

And*_*nin 20 dart

我正在尝试设计一个接口,该接口抽象不应直接从 UI 使用的长时间运行的操作。为了抽象它,我创建了一个抽象类,其中包含执行此类操作的唯一方法:

abstract class MakeSomething {

  Result make(Param param);

}
Run Code Online (Sandbox Code Playgroud)

但是我不能将它标记为async(试图放在签名之前,返回类型之前和分号之前)。有可能吗,如果有的话 - 怎么做?

jam*_*lin 28

async函数几乎总是必须返回一个Future. (一个不常见的异常是async函数的void返回类型可能是“即发即弃”;在这种情况下,当函数完成时没有自动通知调用者的方法。)

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

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