Этот вопрос уже задавался, но я все еще не получил его ... Я пытаюсь отменить задачу, но когда я включаю ThrowIfCancellationRequested (), она не перехватывается, и если я ее не включаю,GUI зависает ...
Вот мой код, который запускается без ThrowIfCancellationRequested (), но замораживает GUI:
public void StartProcess(double myvariable)
{
tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
processThread = Task.Factory.StartNew(() =>
{
while (true)
{
//Do some work with myvariable
if (token.IsCancellationRequested)
{
break;
}
}
}, token);
}
И код с ThrowIfCancellationRequested (), который не перехватывается,отладчик останавливается на строке token.ThrowIfCancellationRequested ():
public void StartProcess(double myvariable)
{
tokenSource = new CancellationTokenSource();
CancellationToken tokenDispatcher = tokenSource.Token;
processThread = Task.Factory.StartNew(() =>
{
try
{
while (true)
{
//Do some work with myvariable
if (token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();
break;
}
}
}
catch (AggregateException ae)
{
if (ae.InnerException is OperationCanceledException)
{
Console.WriteLine("Process Thread Cancelled");
}
else
{
Console.WriteLine("ERROR");
}
}
}, token);
}
Что я делаю не так?