Async.Start 保证完成吗?
Is Async.Start guaranteed to finish?
我找不到这方面的任何文档。
想问一下在F#中使用Async.Start
是否能保证完成,即使调用者或主线程在完成前退出。
具体来说,我想在处理每个输入后将大量数据记录到磁盘上,并且想知道我是否可以简单地使用 Async.Start 来完成此操作。
非常感谢。
.NET 中有 two kinds of threads。前台线程使进程保持活动状态。 Async.Start
在线程池上运行计算。线程池线程是后台线程。所以 运行 异步操作通常不会完成。
以下程序打印 Starting
、Exiting main
/ async true
和 T2 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
我找不到这方面的任何文档。
想问一下在F#中使用Async.Start
是否能保证完成,即使调用者或主线程在完成前退出。
具体来说,我想在处理每个输入后将大量数据记录到磁盘上,并且想知道我是否可以简单地使用 Async.Start 来完成此操作。
非常感谢。
.NET 中有 two kinds of threads。前台线程使进程保持活动状态。 Async.Start
在线程池上运行计算。线程池线程是后台线程。所以 运行 异步操作通常不会完成。
以下程序打印 Starting
、Exiting main
/ async true
和 T2 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