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).