최근에 Hopac을 가지고 노는 것을 시작했는데 정말 멋지다고 생각합니다. 여기에 내 머리를 감쌀 수없는 문제가 있습니다.Hopac timeOutMillis가 예상대로 작동하지 않습니다.
let rnd = new Random()
let logger (msg:string) =
let c = Ch<string>()
let msgLoop = job {
for i in [1..15] do
let msgStr = sprintf "%s %d" msg i
do! timeOutMillis (rnd.Next(1000,3000))
do! c *<- msgStr
}
printfn "Started job %s" msg
msgLoop |> start
c
let timeout = timeOutMillis 3000
let c = logger "Instance Foo"
let rec printLoop() = Job.delay <| fun() ->
Alt.choose[
timeout ^=> fun() -> printfn "job timed out"
Job.result()
Ch.take c ^=> fun msg -> printfn "Log: %s" msg
printLoop()
]
printLoop() |> start
3000 밀리 초는 시간 제한 대안을 사용할 수있게됩니다 및 인쇄 메시지를 중단됩니다 경과 후 나는 그것을 가정 : 아래는 코드입니다. 이것은 일어나지 않으며 채널에 아무 것도 남지 않는 경우에만 시간 초과가 시작됩니다. c
나는 여러 대안이 동시에 사용할 수있는 경우 문서에 따라 이후 처음 placein의 Alt.choose 목록에 어떤 도움이 (On the Semantics of Alternatives)
포착됩니다 목록에 처음으로 나타나는 하나를 타임 아웃을 배치 매우 높이 평가 됨
감사합니다. 평가할 때마다 시간 초과가 다시 시작되는 일은 결코 없었습니다. 지금 매력으로 작동합니다. –