【发布时间】:2019-10-11 18:05:37
【问题描述】:
我定义了以下表达式:
let startCycle =
FDebug.printfn "startCycle"
let run2 = async {
FDebug.printfn "Start"
do! Async.Sleep 1000
FDebug.printfn "End"
}
FDebug.printfn "Here"
Async.Start (run2, Backend.State.controlBoard.CycleRunningTokenSource.Token)
(0, "")
运行表达式“startCycle”时,我只看到以下输出:
startCycle
Here
由于某种原因,run2 函数在调用 Async.Start 时没有运行。系统没有做任何其他事情,所以 cpu 没有负载。关于我所缺少的任何想法?这适用于 F# 4.7 和 .NET Core 3。
编辑
我进行了以下更改以验证取消令牌没有被取消。
let startCycle =
FDebug.printfn "startCycle"
let run2 = async {
FDebug.printfn "Start"
do! Async.Sleep 1000
FDebug.printfn "End"
}
FDebug.printfn "%A" Backend.State.controlBoard.CycleRunningTokenSource.IsCancellationRequested
Async.Start (run2, Backend.State.controlBoard.CycleRunningTokenSource.Token)
(0, "")
输出:
startCycle
false
调用startCycle 的进程在调用startCycle 返回后仍在运行。这是 WPF 应用程序的一部分,用户可以输入命令,其中一个是 startCycle,它调用上述表达式。
编辑 2
在解决此处讨论的问题后,此问题已得到解决: F# not returning at end of expression
【问题讨论】:
-
Async.Start不等待结果。它可以与Async.RunSynchronously一起使用吗? -
调用startCycle后进程是否结束?