我有一个MailBoxProcessor
,它执行以下操作:
主循环(
type AsyncRunner
:https ://github.com/kkkmail/ClmFSharp/blob/master/Clm/ContGen/AsyncRun.fs#L257 - 行号可能会随着我不断更新代码而改变)。它生成一些“模型”,将它们中的每一个编译到特定于模型的文件夹中,将它们作为外部进程生成,然后每个模型使用 WCFAsyncRunner
通过调用updateProgress
. 一个模型可能需要几天时间才能运行。一旦完成任何模型,跑步者就会生成/产生更多。它被设计为以 100% 的处理器负载运行(但优先ProcessPriorityClass.BelowNormal
级Environment.ProcessorCount
:MailBoxProcessor
目前,我通过使用“异步”编辑了几乎所有内容… |> Async.Start
以确保我“永远不会”阻塞主循环。我可以通过调用
member this.getState () = messageLoop.PostAndReply GetState
.或者我可以向它发送一些命令(再次使用 WCF),例如
member this.start()
,member this.stop()
, ...</p>
这就是有趣的地方。一切正常!PostAndReply
但是,如果我运行一个“监视器”,它会通过在无限循环中有效地调用(暴露为)来请求一个状态this.getState ()
,过一会儿它就会挂断。我的意思是它最终会返回,但会有一些无法预测的大延迟(比如几分钟)。同时,我可以发出命令,它们确实快速返回,但getState
仍然没有返回。
是否有可能使其在接近 100% 的负载下响应?非常感谢!