F#List.Map是否保证从左项到右项的执行顺序?

F#List.Map是否保证从左项到右项的执行顺序?,f#,functional-programming,parallel-processing,F#,Functional Programming,Parallel Processing,我有一个需要按特定顺序执行的http命令列表 Let cmd = [ (Get, "http://login.xxx.com"); (Post, "http://login.xxx.com", "login=name;password=pwd"); ....] cmd |> List.map (crawl) 爬网是否总是自顶向下运行http请求(即使在多核计算机中)?如果无法保证,强制执行命令的最佳方式是什么 是的,List.map是单线程的,因此可以保证执行

我有一个需要按特定顺序执行的http命令列表

Let cmd = [
    (Get, "http://login.xxx.com"); 
    (Post, "http://login.xxx.com", "login=name;password=pwd");
    ....]

cmd |> List.map (crawl)

爬网是否总是自顶向下运行http请求(即使在多核计算机中)?如果无法保证,强制执行命令的最佳方式是什么

是的,List.map是单线程的,因此可以保证执行顺序。您只需确保爬网功能不会启动异步启动并忘记操作,这可能已经是最简单的方式了,即确保使用
WebClient.DownloadString
而不是异步版本。

未来版本的F#会优化它并使其成为多线程吗?尤其是它是不可变的,这正是函数式编程擅长的。除了在有限的领域之外,自动并行化仍然是一个白日梦。然而,程序员指定的并行化通常是微不足道的,假设不可变(例如,只要将
List.map
更改为
PSeq.map
,给定正确的
PSeq
并行运算符模块),List.map不会改变输入,其输出是不可变的,但传递给它的函数可能有副作用。这让我们回到程序员指定的并行化……奇怪的是,haskell会保证顺序吗?如果没有,如何在haskell中处理?