Wpis z mikrobloga

Pytanko. Chcę ograniczyć liczbę updatów wykonywanych przez kod. Nie mają one się wykonywać częściej niż zadany interwał. Ta część wykonuje już w większości to co bym chciał, ma jeden problem - opóźnia pierwsze wykonanie, chociaż nie ma takiej potrzeby. Jakiś pomysł jak to przerobić, żeby opóźnić tylko wtedy, jeśli od ostatniego wykonania, nie minał delayInterval? Aha i ma się to wykonać tylko raz, nawet jeśli dostaliśmy 200 requestów w czasie delayTask. Pewnie to proste, ale kurde async await niestety to nie mój konik :(
https://pastebin.com/k1wTJT74
#csharp #programowanie
  • 8
Spróbuj przesunąć await delayTask; wiersz niżej, albo odczekuj na wykonanie całej listy przez Task.WaitAll
Możesz też aktualizować interval odejmując od domyślnego czas poprzedniego wykonywania.
@Haziux
@object może źle się wyraziłem. Chodzi o to, że dostaje dużo eventów, każdy z nich powoduje update, wyciągamy z bazy to co nas interesuje. W jednym z scenariuszy update zdarza się duuuzo częściej niż w innym, przez to bardzo dużo razy wyciągamy z bazy w sumie to samo (jeśli dostanę event po 5s i 15s to drugi update będzie miał już dane z pierwszego).
Teraz pierwsze rozwiązanie nic mi nie daje,
Jak zwrócicie uwagę to zauważycie, że w moim przypadku jeśli tylko delay task się skończy to stan currentTask jest de facto ignorowany. I wiem, że to nie jest thread safe, ale akurat ma to drugorzędne znaczenie w tym przypadku.