我正在尝试从F#启动进程,等待它完成,但也要逐步读取其输出。这是正确/最佳的方法吗?(在我的情况下,我想要执行Git命令,但这与问题无关)
let gitexecute (logger:string->unit) cmd =
let procStartInfo = new ProcessStartInfo(@"C:\Program Files\Git\bin\git.exe", cmd)
// Redirect to the Process.StandardOutput StreamReader.
procStartInfo.RedirectStandardOutput <- true
procStartInfo.UseShellExecute <- false;
// Do not create the black window.
procStartInfo.CreateNoWindow <- true;
// Create a process, assign its ProcessStartInfo and start it
let proc = new Process();
proc.StartInfo <- procStartInfo;
proc.Start() |> ignore
// Get the output into a string
while not proc.StandardOutput.EndOfStream do
proc.StandardOutput.ReadLine() |> logger
我不理解的是proc.Start()怎么能返回一个布尔值,同时又足够异步,让我可以逐步获取输出。
不幸的是,我目前没有足够大的存储库或足够慢的机器来确定发生的顺序...
更新
我尝试了Brian的建议,它确实有效。
我的问题有点模糊。我的误解在于我认为Process.Start()返回整个进程的成功,而不仅仅是'启动'的成功,因此我看不出它怎么能够运行。