【发布时间】:2018-11-08 23:07:58
【问题描述】:
我正在尝试将日志记录同步到 F Sharp 项目中的文件。使用锁计算表达式我试图近似一个资源锁,但它似乎不起作用。
module regiondeployer.logger
open System
open System.IO
open Microsoft.FSharp.Core
open regiondeployer.personalprojectroot
type private logginglock =
static member public lock = new Object()
[<Literal>]
let private logfile = personalprojectroot + "log.txt"
let public initialize() : unit =
use init = File.Create(logfile)
()
let public logtoconsoleandfile (message:string) : unit =
lock logginglock.lock (fun _ ->
Console.WriteLine message
use logfilestream = File.AppendText(logfile)
logfilestream.WriteLine(message)
)
System.IO.IOException HResult=0x80070020 消息=进程 无法访问文件 '日志.txt' 因为它正在被另一个进程使用。来源=mscorlib
我错过了什么?
【问题讨论】:
-
这是在 Windows 上还是在 Linux 上?这两个操作系统使用不同的文件锁定模型,所以在 Linux 上运行良好的东西不一定在 Windows 上运行。
标签: .net multithreading f# locking