опасный. Лучше позволить задаче выбрать точки, в которых она будет отменена.
я есть задача, которую нужно отменить, если время ожидания истекло. Например
var t = Task.Factory.StartNew(() =>
{
Thread.Sleep(5000) // some long running task
"do something"
});
Task.WaitAll(new[] {t}, 1000);
Но, похоже, задача все еще продолжает работать. Я пытался использовать CancellationTokenSource, но, похоже, это не сработало.
Я подтвердил это, используя следующий фрагмент
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();
}
Консоль отображает «Все еще работает». Я думал, что задача была бы отменена.
Я уверен, что что-то упустил. Что мне не хватает? Благодарю.