F#异步线程问题

时间:2011-06-14 13:53:41

标签: multithreading asynchronous f#

我正在学习F#并对这门语言非常感兴趣

我尝试创建异步表达式以异步运行。

例如

let prop1=async{ 
    for i=0 to 1000000 do  ()
       MessageBox.Show("Done")
    }

let prop2=async{ 
    for i=0 to 1000000 do  ()
       MessageBox.Show("Done2")
    }

Async.Start(prop1)
Async.Start(prop2)

当我运行程序时,我得到了程序进程的线程数增加,从6到8,当我完成关闭2消息框时,进程似乎没有破坏那些创建的线程,计数也是8,发生了什么或者我对F#asynchronous

有误解

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

线程是从线程池中获取的(这就是为什么线程多于动作的顺序)。

池一直存在,直到应用程序终止。

无需担心

编辑有关F#,async ThreadPool的一篇优秀深入文章:http://www.voyce.com/index.php/2011/05/27/fsharp-async-plays-well-with-others/

答案 1 :(得分:0)

运行时可能使用线程池,即线程不会被销毁,而是等待另一个异步任务。此技术有助于运行时减少启动新异步的时间。操作,因为创建新线程可能会消耗一些时间和资源。