Async.Start 保证完成吗?

Is Async.Start guaranteed to finish?

我找不到这方面的任何文档。

想问一下在F#中使用Async.Start是否能保证完成,即使调用者或主线程在完成前退出。 具体来说,我想在处理每个输入后将大量数据记录到磁盘上,并且想知道我是否可以简单地使用 Async.Start 来完成此操作。

非常感谢。

.NET 中有 two kinds of threads。前台线程使进程保持活动状态。 Async.Start 在线程池上运行计算。线程池线程是后台线程。所以 运行 异步操作通常不会完成。

以下程序打印 StartingExiting main / async trueT2 done:

open System.Threading

[<EntryPoint>]
let main _ =

    printfn "Starting"

    let t1 = new Thread(fun () ->
        Thread.Sleep 10000
        printfn "T1 done")
    t1.IsBackground <- true
    t1.Start()

    let t2 = new Thread(fun () ->
        Thread.Sleep 1000
        printfn "T2 done")
    t2.IsBackground <- false
    t2.Start()

    Async.Start (async {
        printfn "async %b" Thread.CurrentThread.IsBackground
        do! Async.Sleep 10000
        printfn "Async done"
    })

    printfn "Exiting main"
    0