Как возвращать нужный jsonresult по условию
У меня есть функция b.Func() которая выполняется 7 минут и я хочу чтобы это функция по новой не запускалась пока она выполняется. Я сделал условия в api но оно не работает сам api
[HttpGet]
bool Procc=false;
public async Task<ActionResult> Get()
{
if(Procc==false)
{
Procc=True;
Binary b=new Bynary();
await b.Func();
Procc=false;
return new JsonResult("Succes");
}
else
{
return new JsonResult("Task processing");
}
}
И каждый раз при новом запуске он начинает выполнение этой функция хотя предыдущая не закончилась. Пробовал ставить условие внутри функции такой же эффект
Ответы (1 шт):
Автор решения: Anton K
→ Ссылка
Нужно две модификации:
- Переменную Procc сделать static, т.е. должно быть static bool Procc
- Проверку и выставление Procc нужно обернуть в lock() чтобы не было проблем с потоками.
В результате будет что-то вроде этого:
[HttpGet]
static bool Procc=false;
static object Lock = new object();
public async Task<ActionResult> Get()
{
// Эта переменная нужна чтобы не удерживать Procc в состоянии lock во время исполнении функции Func()
bool needExecute;
lock(Lock)
{
if(Procc==false)
{
Procc=True;
needExecute = true;
}
else
{
needExecute = false;
}
}
if(needExecute == true)
{
Binary b=new Bynary();
await b.Func();
lock(Lock)
{
Procc=false;
}
return new JsonResult("Succes");
}
else
{
return new JsonResult("Task processing");
}
}