Junior — Middle
É possível interromper a execução de uma tarefa devolvida através de Future e como fazer isso?
sobes.tech IA
Resposta da IA
Em Dart (e, consequentemente, no Flutter) não é possível interromper diretamente uma tarefa devolvida por um Future, pois o Future não suporta cancelamento. No entanto, pode-se implementar um cancelamento indireto usando flags ou controladores que são verificados dentro da operação assíncrona.
Por exemplo, pode-se usar Completer e verificar o estado de cancelamento:
class CancellableOperation {
bool _isCancelled = false;
Future<String> run() async {
for (int i = 0; i < 10; i++) {
if (_isCancelled) {
throw Exception('Operação cancelada');
}
await Future.delayed(Duration(seconds: 1));
}
return 'Pronto';
}
void cancel() {
_isCancelled = true;
}
}
void main() async {
final operation = CancellableOperation();
final future = operation.run();
// Cancelar após 3 segundos
Future.delayed(Duration(seconds: 3), () {
operation.cancel();
});
try {
final result = await future;
print(result);
} catch (e) {
print(e); // Operação cancelada
}
}
Para casos mais complexos, pode-se usar pacotes como async com CancelableOperation.
Dessa forma, a cancelamento direto do Future não é possível, mas é possível implementar a lógica de cancelamento dentro da própria tarefa.