Back to questions
Junior — Middle
155
Какими способами можно отменить выполнение задачи, ассоциированной с Future?
Companies where asked
ICL
Answer from AI
sobes.tech AI
В 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');
}
}