static async Task CancelamentoManual() { using (var cancellationTokenSource = new CancellationTokenSource()) { var tecladoTask = Task.Run(() => { Console.WriteLine("Pressione algo para Cancelar..."); Console.ReadKey(); cancellationTokenSource.Cancel(); }); try { var tarefa = TaskA.Execute(cancellationTokenSource.Token); var resultado = await tarefa; Console.WriteLine(resultado); } catch (Exception ex) { if (ex is TaskCanceledException) { Console.WriteLine($"Tarefa cancelada pelo usuario.."); } else { Console.WriteLine(ex.Message); } } } }
static async Task CancelamentoPorTempoEspecifico(int tempoMaximoEsperado = 3000) { try { // instanciamos um CancellationTokenSource passando no construtor o tempo em que o token será cancelado: var cancellationTokenSource = new CancellationTokenSource(tempoMaximoEsperado); // ou, também é possível passar o tempo pelo método 'CancelAfter': cancellationTokenSource.CancelAfter(tempoMaximoEsperado); var resultado = await TaskA.Execute(cancellationTokenSource.Token); Console.WriteLine(resultado); } catch (Exception ex) { if (ex is TaskCanceledException) { Console.WriteLine($"Tarefa cancelada por demorar mais que o esperado: {tempoMaximoEsperado / 1000} segundos"); } else { Console.WriteLine(ex.Message); } } }