我想编写一些运行一系列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)