Отмена задач TPL невозможна из внешних источников.
Сказав это, можно сделать это, передав CancellationToken
своему Task
.
Вы можете проверить свойство этого токена IsCancellationRequested
и сгенерировать исключение, тем самым убив задачу.
Теперь, чтобы активировать это свойство, необходимо создать CancellationTokenSource
, передать его CancellationToken
к цели Task
.
Если вы хотите, чтобы ваша задача была убита, вы должны использовать метод CancellationTokenSource
Cancel
, который действует как триггер и изменяет вышеупомянутое свойство.
Более подробную информацию можно найти здесь !
public void Initialize()
{
CancellationTokenSource cts=new CancellationTokenSource();
Task myTask=Task.Run(()=>Worker(cts.Token),cts.Token);
TriggerLoop(cts);
}
public void TriggerLoop(CancellationTokenSource cts)
{
while(true)
{
if(Console.ReadKey().Key=='A')
{
cts.Cancel();
}
}
}
public void Worker(CancellationToken token)
{
while(true)
{
//do your stuff
if(token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();
}
}
}