Допустим следующий код:
let fn () = use a = new System.IO.StreamWriter ("d:\\test.txt") a let b = fn () b.Write "t"
Выдает следующую ошибку:
ObjectDisposedException: Невозможно записать в закрытый TextWriter.
Почемуэто что?
use относится к функции fn, поэтому, когда возвращается a, она также удаляется.
use
fn
a
Самый простой способ исправить это:
let fn () = let a = new System.IO.StreamWriter ("d:\\test.txt") a let main() = use b = fn () b.Write "t" main()
Чтобы добавить еще немного к правильному ответу Роберта: вы можете добиться еще более точного контроля над областью действия use с помощью объемных конструкций (скобки или начало / конец).См. Ответ Брайана на связанный вопрос.
Ресурс будет удален, как только переменная (в вашем случае a) выйдет из области видимости.
Это означает, что после вызова fn StreamWriter уже будет утилизирован.
StreamWriter