[c#] क्या प्रक्रिया के बराबर कोई एसिंक है। स्टार्ट?


0 Answers

Svick के उत्तर के आधार पर मेरा ले लिया गया है। यह आउटपुट रीडायरेक्शन, एक्जिट कोड प्रतिधारण, और थोड़ा बेहतर त्रुटि हैंडलिंग जोड़ता है ( Process ऑब्जेक्ट को Process करना चाहे भले ही इसे शुरू नहीं किया जा सके):

public static async Task<int> RunProcessAsync(string fileName, string args)
{
    using (var process = new Process
    {
        StartInfo =
        {
            FileName = fileName, Arguments = args,
            UseShellExecute = false, CreateNoWindow = true,
            RedirectStandardOutput = true, RedirectStandardError = true
        },
        EnableRaisingEvents = true
    })
    {
        return await RunProcessAsync(process).ConfigureAwait(false);
    }
}    
private static Task<int> RunProcessAsync(Process process)
{
    var tcs = new TaskCompletionSource<int>();

    process.Exited += (s, ea) => tcs.SetResult(process.ExitCode);
    process.OutputDataReceived += (s, ea) => Console.WriteLine(ea.Data);
    process.ErrorDataReceived += (s, ea) => Console.WriteLine("ERR: " + ea.Data);

    bool started = process.Start();
    if (!started)
    {
        //you may allow for the process to be re-used (started = false) 
        //but I'm not sure about the guarantees of the Exited event in such a case
        throw new InvalidOperationException("Could not start process: " + process);
    }

    process.BeginOutputReadLine();
    process.BeginErrorReadLine();

    return tcs.Task;
}
Question

शीर्षक की तरह सुझाव है, क्या प्रक्रिया के बराबर है। Process.Start (आपको एक और एप्लिकेशन या बैच फ़ाइल चलाने की अनुमति देता है) जिसका मैं इंतजार कर सकता हूं?

मैं एक छोटे कंसोल ऐप के साथ खेल रहा हूं और यह एसिंक का उपयोग करने के लिए एकदम सही जगह जैसा प्रतीत होता है और इंतजार कर रहा है लेकिन मुझे इस परिदृश्य के लिए कोई दस्तावेज नहीं मिल रहा है।

मैं जो सोच रहा हूं वह इन पंक्तियों के साथ कुछ है:

void async RunCommand()
{
    var result = await Process.RunAsync("command to run");
}



Related