Sto eseguendo alcune operazioni asincrone e vorrei utilizzare CancellationToken per interrompere l'esecuzione di un'attività asincrona se l'utente lo richiede ad esempio. Per fare ciò è una buona pratica avere un dizionario con il quale posso trovare la discussione corretta per fermare l'operazione corretta? Quello che sto attualmente guardando è il seguente:Cancellazione Esempio di codice token
public Dictionary<Thread, CancellationToken> CancellationTokenData;
Così, se l'utente richiede la cancellazione su un'operazione dovrebbe comportarsi correttamente se non sbaglio?
Quali sono le migliori pratiche per farlo?
Ad esempio, dire che l'utente esegue alcune operazioni molto lunghe su un set {A} all'interno del database utilizzando un Thread {B}. Quindi annulla l'operazione e va e usa un'altra lunga operazione sul set {A} da un altro thread. Dovrei usare una variabile globale per l'attuale CancellationToken
?
Non posso dire di aver capito cosa stai chiedendo ma le cancellazioni sono piuttosto semplici e non c'è assolutamente alcun motivo per tenere traccia dei thread. Crei una proprietà di CancellazioneToken e passa il suo token a qualsiasi operazione lunga, vale a dire qualsiasi metodo che accetta un token di cancellazione. Il client chiama il 'source' per interrompere, la sorgente segnala il token, qualsiasi * operazione * che controlla questo termina con grazia. È l'operazione/metodo che termina, non il thread. Non esiste un token "corrente", puoi passare lo stesso token a più operazioni –
@PanagiotisKanavos Ok, ma stai usando una variabile locale per farlo? Se sto usando uno locale mi sento troppo limitato per poterlo chiamare solo all'interno del metodo corrente, e se lo uso come variabile globale le cose possono diventare disordinate? Dovrei avere uno globale per ciascuno? Spero che siamo sulla stessa pista. – Hristo
Ho capito bene che ci sono delle dipendenze tra i thread? Quindi, ovviamente, DEVE usare lo stesso token per loro - e l'uso di un dizionario non ha senso ... –