Возможно ли это?
Да, при довольно наивном подходе ваш код контроллера будет выглядеть так:
private static CancellationTokenSource Source {get;set;}
public void Run()
{
try{
Source = new CancellationTokenSource();
DoLongJob(Source.Token);
}
catch
{
Source = null;
}
}
public void Abort()
{
if(Source!=null) Source.Cancel();
Source = null;
}
Вы передадите CancellationToken вдольцепочка вызовов вашего DoLongJob
метода и вспомогательных вызовов.В разных точках вашего кода вы будете звонить token.ThrowIfCAncellationResquested()
Конечно, как уже говорилось, это очень просто.Он будет работать одновременно только с одним веб-сервером и одной задачей.