Hej, mam taki problem, który wydaje się ciekawy i można go ugryźć na kilka sposobów.
Jest sobie bardzo proste ASYNCHRONICZNE WebApi. Zadaniem tego API jest po prostu odpalenie długotrwałej operacji po otrzymaniu requestu. Ta operacja może trwać nawet kilka godzin.
I jest ograniczenie, że można uruchomić tylko jedną operację jednocześnie. Tzn. aby odpalić następną, najpierw ta działająca musi się zakończyć.
I pytanie, jak sprawdzić, czy ona jeszcze trwa?
Sposób 1
Zapisać stan w bazie danych. Na końcu operacji zmienić stan na finished, a potem sprawdzić, czy jest finished, czy nie.
Problem
A co jeśli z jakiegoś powodu apka się wyrżnie i zostanie zrestartowana? Stan tamtej operacji cały czas będzie ustawiony na "running" i nie będzie można odpalić kolejnej bez grzebania w bazie danych
Sposób 2
Zarejestrować sobie jakiegoś singletona, do którego będę przekazywał uruchomiony obiekt Task. Potem sprawdzam, czy ten singletonowy serwis ma Task, który chodzi. Co daje nawet możliwość przerwania go.
Problem
Coś mi tu śmierdzi, ale nie wiem co. Może niezgodność z RESTApi? Ale przecież to jest zgodne z asynchronicznymi api.
Sposób 3
Dokładnie tak samo jak 2, tylko użyć HostedService.
Problem
???
A jak Wy byście podeszli do tematu? Jakieś plusy i minusy konkretnych rozwiązań? A może inne możliwości?