FileStream blokujący plik do odczytu i zapisu

Mam następujący blok kodu, który mnie boli.

Logicznie powinno działać tak, jak używam strumienia plików zapewniającego blokadę w instrukcji using. Gdy dojdzie do linii, która tworzy StreamWriter, nie powie, że „plik nie jest zapisywalny”.

Teraz mój program jest aplikacją wielowątkową. Dowolny wątek może próbować zapisać do tego pliku. Potrzebuję programu do zablokowania pliku, przeczytania treści, sprawdzenia zawartości, a następnie zapisania zmian. Podczas tego procesu żaden inny wątek nie powinien mieć dostępu do tego pliku.

using (var fs = File.Open(fileLoc, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
    var sr = new StreamReader(fs);
    var str = sr.ReadToEnd();
    var strArray = str.Split(',');
    if (strArray.Any(st => st == text))
    {
        return;
    }
    sr.Close();

    var sw = new StreamWriter(fs);
    sw.Write(str + text);
    sw.Flush();
    sw.Close();
}

questionAnswers(2)

yourAnswerToTheQuestion