Скажем, у меня есть код, который делает это:
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
Прежде всего: проблема в том, что у меня есть блок Try / Catch / finally внутри SyncLock?
Во-вторых, предположим, что этот код выполняется на событии потенциально много раз за небольшой промежуток времени - скажем, десять раз в секунду. Можно ли использовать его как SyncLock, или было бы разумнее добавить его в очередь, а затем записать все строки из очереди в файл по таймеру, который срабатывает, скажем, каждую секунду?