ユーザーがアプリケーションを使用するときに、ユーザーごとにアプリケーション内のいくつかの変数のユーザー名、時間、および古い/変更された値を書き込む監査ファイルを作成しています。FileStream
およびを使用してStreamWriter
、監査ファイルにアクセスしています。各ユーザーのすべての監査は、同じファイルに書き込まれます。
問題は、2 人のユーザーがこの監査ファイルを同時に更新している場合、各変数の「古い値」がユーザー間で混同されることです。これはなぜですか?また、ここで同時実行性の問題をどのように解決できますか?
簡潔にするために短縮されたいくつかのコード...
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 クラスに存在します (関数がアクセスされるたびに再割り当てされます)。