Robię kilka operacji asynchronicznych i chciałbym użyć AnulujToken, aby zatrzymać uruchamianie zadania asynchronicznego, jeśli użytkownik na przykład zażąda tego. W tym celu dobrą praktyką jest posiadanie Słownika, dzięki któremu mogę znaleźć prawidłową Gwintę, aby zatrzymać prawidłową operację? Co Jestem obecnie patrząc na to:Przykład źródła Tokenka anulowania
public Dictionary<Thread, CancellationToken> CancellationTokenData;
Zatem, jeżeli użytkownik zażąda unieważnienia na operację powinien zachowywać się poprawnie, jeśli się nie mylę?
Jakie są najlepsze praktyki, aby to zrobić?
Na przykład powiedz, że użytkownik wykonuje bardzo długą operację na zbiorze {A} wewnątrz bazy danych za pomocą wątku {B}. Następnie anuluje operację i wykonuje kolejną długą operację na zbiorze {A} z innego wątku. Czy należy używać zmiennej globalnej dla bieżącego CancellationToken
?
Nie mogę powiedzieć, że rozumiem, o co prosisz, ale anulowanie jest dość proste i nie ma absolutnie żadnego powodu, aby śledzić wątki. Tworzysz obiekt CancellationTokenSource i przekazujesz jego token do dowolnej długiej operacji, tj. Dowolnej metody akceptującej token anulowania. Klient wywołuje 'źródło' do przerwania, źródło sygnalizuje token, każda * operacja *, która monitoruje to kończy się z wdziękiem. Jest to operacja/metoda, która się kończy, a nie wątek. Nie ma tokena "bieżącego", możesz przekazać ten sam token do wielu operacji –
@PanagiotisKanavos Ok, ale czy używasz zmiennej lokalnej, aby to zrobić? Jeśli używam lokalnego, mam zbyt ograniczone, że mogę go nazwać tylko w obecnej metodzie, a jeśli używam go jako zmiennej globalnej, rzeczy mogą stać się nieporządne? Czy powinienem mieć jeden globalny dla każdego? Mam nadzieję, że jesteśmy na tym samym torze. – Hristo
Czy dobrze rozumiem, że istnieją zależności między wątkami? Oczywiście MUSISZ użyć tego samego tokena - a używanie słownika nie ma sensu ... –