我想编写一些运行一系列F#脚本(.fsx)的代码.问题是我可以拥有数百个脚本,如果我这样做:
let shellExecute program args =
    let startInfo = new ProcessStartInfo()
    do startInfo.FileName        <- program
    do startInfo.Arguments       <- args
    do startInfo.UseShellExecute <- true
    do startInfo.WindowStyle     <- ProcessWindowStyle.Hidden
    //do printfn "%s" startInfo.Arguments 
    let proc = Process.Start(startInfo)
    ()
scripts
|> Seq.iter (shellExecute "fsi")
Run Code Online (Sandbox Code Playgroud)
它可能会对我的2GB系统造成太大压力.无论如何,我想通过n批运行脚本,这似乎也是一个很好的学习练习Async(我想这是要走的路).
我已经开始为此编写一些代码但不幸的是它不起作用:
open System.Diagnostics
let p = shellExecute "fsi" @"C:\Users\Stringer\foo.fsx"
async {
    let! exit = Async.AwaitEvent p.Exited
    do printfn "process has exited"
}
|> Async.StartImmediate
Run Code Online (Sandbox Code Playgroud)
foo.fsx只是一个hello world脚本.解决这个问题最常用的方法是什么?
我还想弄清楚是否可以为每个执行脚本检索返回代码,如果没有,找到另一种方法.谢谢!
编辑:
非常感谢您的见解和链接!我学到了很多东西.我只想添加一些代码来并行使用Async.ParallelTomas建议的并行运行批处理.如果我的cut功能有更好的实现,请评论.
module …Run Code Online (Sandbox Code Playgroud)