В Dart (и Flutter) объект Future сам по себе не поддерживает прямую отмену выполнения задачи. Однако есть несколько подходов для отмены:
Какими способами можно отменить выполнение задачи, ассоциированной с Future?
В Dart (и Flutter) объект Future сам по себе не поддерживает прямую отмену выполнения задачи. Однако есть несколько подходов для отмены:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В Dart (и Flutter) объект Future сам по себе не поддерживает прямую отмену выполнения задачи. Однако есть несколько подходов для отмены:
- Использование флага отмены — внутри асинхронной функции проверять специальный флаг и прерывать выполнение.
- Использование
CancelableOperationиз пакетаasync— оборачивает Future и позволяет вызвать методcancel(). - Использование
Streamвместо Future — потоки можно закрывать и таким образом прерывать обработку. - Отмена на уровне источника задачи — например, если Future связан с HTTP-запросом, можно отменить запрос через контроллер (например,
CancelTokenв Dio).
Пример с CancelableOperation:
import 'package:async/async.dart';
void main() async {
var cancelable = CancelableOperation.fromFuture(
Future.delayed(Duration(seconds: 5), () => 'Done'),
);
// Отмена через 2 секунды
Future.delayed(Duration(seconds: 2), () {
cancelable.cancel();
print('Cancelled');
});
try {
var result = await cancelable.value;
print(result);
} catch (e) {
print('Operation was cancelled');
}
}