示例#1
0
        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);
                    }
                }
            }
        }
示例#2
0
        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);
                }
            }
        }