Проблема в том, что ваше logginglock.lock
является свойством с геттером, поэтому новый объект возвращается каждый раз, когда вы получаете к нему доступ. В результате потоки блокируют разные объекты и одновременно получают доступ к файлу.
Если вы настаиваете на наличии объекта блокировки в качестве поля статического объекта, то вы можете определить статическое поле, используя static let
, а затем просто вернуть объект:
type private logginglock() =
static let _lock = new obj()
static member public lock = _lock
Тем не менее, это будет работать одинаково хорошо, если бы вы только что имели объект блокировки как глобальное значение в модуле (если он является частным для модуля). Скорее всего, это скомпилируется во что-то очень похожее на приведенный выше код - хотя существуют разные тонкости, связанные с блокировкой объектов и синглетонов, которые я никогда не понимал ...
let private loggingLock = obj()