언제 올지 Task.IsCanceled = true;Task.IsCancelled가 true로 설정되면?
코드 :
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.
}
내 요구 사항입니다 - 작업은 작업을 취소 할 필요가 십초 개까지 완료되지 않습니다.
그래서 타이머를 설정하고 주어진 초까지 볼 수 있습니다. 완료되지 않았 으면 작업을 취소하고 오류 메시지를 표시합니다. 문서에서
[최소, 완료 및 확인 가능한 예제] (http://stackoverflow.com/help/mcve)를 포함하십시오. 당신이 보여주는 것은 불완전합니다. – Igor
토큰을 취소하는 것만으로는 충분하지 않습니다. 작업 취소를위한'method' 코드를 확인해야합니다. – VMAtm
작업 t가 기다리는 코드를 표시 할 수 있습니까? 그리고 올바른 방법으로 실행하는 데 20 초 이상 걸리면 전체 작업을 취소하고 싶습니까? –