相关疑难解决方法(0)

需要有关Async和fsi的帮助

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

f# asynchronous sequence f#-interactive

4
推荐指数
2
解决办法
1181
查看次数

标签 统计

asynchronous ×1

f# ×1

f#-interactive ×1

sequence ×1