Junior — Middle
200
Future-мен байланысты тапсырманы қалай тоқтатуға болады?
Сұралған компаниялар
ICL
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');
}
}