これを行うコードがあるとします:
Public Function AppendToLogFile(ByVal s As String) As Boolean
Dim success As Boolean = True
Dim fs As IO.FileStream = Nothing
Dim sw As IO.StreamWriter = Nothing
Static LogFileLock As New Object()
SyncLock LogFileLock
Try
fs = New IO.FileStream(LogFilePath)
sw = New IO.StreamWriter(fs)
sw.WriteLine(s)
Catch ex As Exception
success = False
Finally
If Not sw Is Nothing Then sw.Close()
If Not fs Is Nothing Then fs.Close()
End Try
End SyncLock
Return success
End Function
まず第一に、SyncLock 内に Try/Catch/Finally ブロックがあるのは問題ですか?
2 番目に、このコードがイベントで、短い時間枠内で何度も実行される可能性があるとします。たとえば、1 秒間に 10 回実行されます。このように SyncLock を使用しても問題ありませんか、それとも Queue に行を追加してから、たとえば 1 秒ごとにオフになるタイマーで Queue からすべての行をファイルに書き込む方が理にかなっていますか?