когда придет Task.IsCanceled = true;, когда Task.IsCancelled настроен как истинный?
Код:
var cts = new CancellationTokenSource();
string result = "";
cts.CancelAfter(10000);
try
{
Task t = Task.Run(() =>
{
using (var stream = new WebClient().OpenRead("http://www.rediffmail.com"))
{
result = "success!";
}
cts.Token.ThrowIfCancellationRequested();
}, cts.Token);
Stopwatch timer = new Stopwatch();
timer.Start();
while (timer.IsRunning)
{
if (timer.ElapsedMilliseconds <= 10000)
{
if (result != ""){
timer.Stop();
Console.WriteLine(result);
}
}
else
{
timer.Stop();
//cts.Cancel();
//cts.Token.ThrowIfCancellationRequested();
}
}
}
catch (OperationCanceledException)
{
Console.WriteLine(t.IsCanceled); // still its appear in false.
}
Мое требование - задача не завершена ДО 10 секунд, нужно отменить задание.
Так что я устанавливаю таймер и смотрю до заданных секунд. его незавершенность означает отмену задачи и отображение сообщения об ошибке.
Пожалуйста, укажите [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). То, что вы показали, является неполным. – Igor
Недостаточно отменить токен, вам нужно проверить код метода для отмены задания – VMAtm
Можете ли вы показать код, в котором ожидает Task t? И чтобы быть верным, вы хотите отменить всю операцию, если для выполнения этого метода требуется более 20 секунд, не так ли? –