Какими способами можно отменить выполнение задачи, ассоциированной с Future?

В Dart (и Flutter) объект Future сам по себе не поддерживает прямую отмену выполнения задачи. Однако есть несколько подходов для отмены:

Короткий ответ

Что ответить на собеседовании

В Dart (и Flutter) объект Future сам по себе не поддерживает прямую отмену выполнения задачи. Однако есть несколько подходов для отмены:

Подробный разбор

Ответ с пояснениями

В Dart (и Flutter) объект Future сам по себе не поддерживает прямую отмену выполнения задачи. Однако есть несколько подходов для отмены:

  1. Использование флага отмены — внутри асинхронной функции проверять специальный флаг и прерывать выполнение.
  2. Использование CancelableOperation из пакета async — оборачивает Future и позволяет вызвать метод cancel().
  3. Использование Stream вместо Future — потоки можно закрывать и таким образом прерывать обработку.
  4. Отмена на уровне источника задачи — например, если 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');
  }
}

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку