опасный. Лучше позволить задаче выбрать точки, в которых она будет отменена.

я есть задача, которую нужно отменить, если время ожидания истекло. Например

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();
        }

Консоль отображает «Все еще работает». Я думал, что задача была бы отменена.

Я уверен, что что-то упустил. Что мне не хватает? Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос