Cancelando uma Tarefa
Tenho uma tarefa que preciso cancelar se o tempo de espera terminar. Por exemplo
var t = Task.Factory.StartNew(() =>
{
Thread.Sleep(5000) // some long running task
"do something"
});
Task.WaitAll(new[] {t}, 1000);
Mas parece que a tarefa ainda continua funcionando. Eu tentei usar CancellationTokenSource, mas isso não parecia funcionar também.
Confirmei isso usando o seguinte trecho
static void Main(string[] args)
{
var cancellationTokenSource = new CancellationTokenSource();
var t = Task.Factory.StartNew(() => {
Thread.Sleep(5000);
Console.WriteLine("Still working");
}, cancellationTokenSource.Token);
Task.WaitAll(new[] {t}, 1000);
cancellationTokenSource.Cancel();
Console.ReadLine();
}
O console exibe "Ainda funcionando". Eu pensei que a tarefa teria sido cancelada.
Tenho certeza de que estou perdendo alguma coisa. O que estou perdendo? Obrigado.