In un ambiente multi-thread, dobbiamo considerare l'accesso simultaneo alle risorse scrivibili. Un approccio comune è usare Monitor
o la sua forma abbreviata lock
.
Task
è a un diverso livello di astrazione rispetto a Thread
. Un'attività può essere eseguita su un thread (e in base ai log, lo fanno nella nostra applicazione), ma ciò non è garantito. Vedi per es. Qual è la differenza tra attività e thread? :
If the value you are waiting for comes from the filesystem or a database or the network, then there is no need for a thread to sit around and wait for the data when it can be servicing other requests. Instead, the Task might register a callback to receive the value(s) when they're ready.
Cioè, quel tipo di Task
condivide in qualche modo un Thread
con altro codice in esecuzione (devo ammettere che non capisco come funzioni in dettaglio, attualmente mi sembra una specializzazione del "famoso" DoEvents
).
Di conseguenza, Monitor
non sarà in grado di distinguerli, e - poiché Monitor
può essere rientranti - consentire a entrambi di accedere alla risorsa. Cioè, Monitor
"fallisce."
Esempi con Threads
generalmente usano Monitor
tuttavia. Quindi voglio chiedere come posso essere sicuro che Monitor
sia sicuro con un Task
(oppure: come posso essere sicuro che una Task
sia in esecuzione su un Thread
del proprio).