Con questo codice per un logger molto di base:Perché il blocco di questo codice non funziona?
lock (string.Concat("LogWritter_", this.FileName))
{
using (var fileStream = File.Open(this.FileName, FileMode.Append, FileAccess.Write, FileShare.Read))
{
using (var w = new StreamWriter(fileStream))
{
w.Write(message);
}
}
}
quando provo da un paio di thread contemporaneamente ho ottenere rapidamente l'errore:
The process can't access the file because its being used by another file.
Perché il blocco non impedisce i fili per l'accesso il file allo stesso tempo?
Non importa se i thread chiamano la stessa istanza o diverse istanze nello stesso file. Inoltre ho pensato che potrebbe essere causa di un rinvio durante la scrittura di file in Windows, ma su Linux accade la stessa cosa.
codice hash! = Riferimento. Utilizzare 'ReferenceEquals'. –
codice hash! = Riferimento – TheBuzzSaw
Il codice hash è un sommario del * contenuto * della stringa. Il riferimento contiene i dettagli relativi a quell'istanza particolare. Il compilatore ha opzioni per combinare automaticamente stringhe hard-coded con contenuti identici, ma il tempo di esecuzione non fa tonnellate di confronti retro solo per combinare alcune stringhe. – TheBuzzSaw