Я пишу файл аудита, в котором записываются имя пользователя, время и старые / измененные значения нескольких переменных в приложении для каждого пользователя, когда они используют мое приложение. Он использует FileStream
и StreamWriter
для доступа к файлу аудита. Все аудиты для каждого пользователя будут записаны в один и тот же файл.
Проблема в том, что когда два пользователя обновляют этот файл аудита одновременно, «старое значение» каждой переменной смешивается между пользователями. Почему это так и как здесь решить проблему параллелизма?
Какой-то код, сокращенный для краткости ...
Dim fs As FileStream
Dim w As StreamWriter
Public Sub WriteAudit(ByVal filename As String, ByVal username As String, ByVal oldAddress As String, ByVal newAddress As String, ByVal oldCity As String, ByVal newCity As String)
Dim now As DateTime = DateTime.Now
Dim audit As String = ""
audit += now + "," + username + "," + oldAddress + "," + newAddress + "," + oldCity + "," + newCity
fs = New FileStream(filename, FileMode.Append)
w = New StreamWriter(fs)
w.WriteLine(audit)
w.Close()
fs.Close()
End Sub
Он находится в классе AuditLogger, на который ссылается переменная экземпляра (перераспределяется при каждом доступе к функции).