Sobes.tech
Junior — Middle
130

Future арқылы қайтарылған тапсырманың орындалуын қалай тоқтатуға болады және оны қалай жасауға болады?

Сұралған компаниялар
ICL

AI-дан жауап

sobes.tech AI

В Dart (и, соответственно, в Flutter) напрямую прервать выполнение задачи, возвращаемой через Future, нельзя, так как Future не поддерживает отмену. Однако можно реализовать отмену косвенно, используя флаги или контроллеры, которые проверяются внутри асинхронной операции.

Например, можно использовать Completer и проверять состояние отмены:

class CancellableOperation {
  bool _isCancelled = false;

  Future<String> run() async {
    for (int i = 0; i < 10; i++) {
      if (_isCancelled) {
        throw Exception('Операция отменена');
      }
      await Future.delayed(Duration(seconds: 1));
    }
    return 'Готово';
  }

  void cancel() {
    _isCancelled = true;
  }
}

void main() async {
  final operation = CancellableOperation();
  final future = operation.run();

  // Через 3 секунды отменим
  Future.delayed(Duration(seconds: 3), () {
    operation.cancel();
  });

  try {
    final result = await future;
    print(result);
  } catch (e) {
    print(e); // Операция отменена
  }
}

Для более сложных случаев можно использовать пакеты, например, async с CancelableOperation.

Таким образом, прямая отмена Future невозможна, но можно реализовать логику отмены внутри самой задачи.