Как остановить длительный запрос другим запросом - PullRequest
0 голосов
/ 27 февраля 2019

У меня следующая ситуация. У меня есть приложение ASP NET, на которое я хочу ответить на 2 пути:

  • /run - длительное выполнение задачи
  • /abort

У меня был бы сценарий, где client1 проходит через /run (запускает задачу), а через пару минут client2 пройдет через /abort и отменитtask из client1.

Возможно ли это?

1 Ответ

0 голосов
/ 27 февраля 2019

Возможно ли это?

Да, при довольно наивном подходе ваш код контроллера будет выглядеть так:

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()

Конечно, как уже говорилось, это очень просто.Он будет работать одновременно только с одним веб-сервером и одной задачей.

...