3
我正在實施C#應用程序。我需要同時在多個遠程計算機上執行程序。爲此,我使用PSExec
而不是多線程CMD
。基本上,對於每臺機器,我啓動一個啓動CMD
進程的線程。根據遠程執行的程序的結果,如果需要超過x分鐘(希望是有道理的),我想要採取行動或殺死它。執行多個CMD任務並異步更新
我有問題是,我真的不知道如何控制多久過程已經比使用WaitForExit
運行等,並不會真的讓我去多線程,因爲它等待直到CMD
呼叫已完成。
我確定必須有這樣做的方法,但我無法真正弄明白。任何人都可以幫我嗎?
這裏是我的代碼(我在C#編碼新,因此可能不是最好的代碼,隨時糾正它的任何一部分,你認爲這是不對的):
public async void BulkExecution()
{
//Some code
foreach (string machine in Machines)
{
//more code to work out the CMDline and other duties.
var result = Task.Factory.StartNew(r => ExecutePsexec((string)r, RunBeforeKillMsec), CMDLine);
await result;
}
//More Code
}
private static void ExecutePsexec(string CMDline, int RunBeforeKillMsec)
{
Process compiler = new Process();
compiler.StartInfo.FileName = "psexec.exe";
compiler.StartInfo.Arguments = CMDline;
compiler.StartInfo.UseShellExecute = false;
compiler.StartInfo.RedirectStandardOutput = true;
compiler.Start();
if (!compiler.WaitForExit(RunBeforeKillMsec))
{
ExecutePSKill(CMDline);
}
else
{
//Some Actions here
Common.Log(LogFile, CMDline.Split(' ')[0] + " finished successfully");
}
}
你正在告訴它等待:'等待結果;'。刪除。 – usr
有些事我不明白。這個過程由'WaitForExit'而不是'await result'保存。 WaitForExit存在的原因是檢查CMD的進度,看看是否必須殺死進程或認爲它已成功完成。我有什麼意義嗎? – AMs
ExecutePsexec在單獨的任務中運行。所有這些任務都是獨立的。等待結果就是對它們進行排序。去掉它。 – usr