Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Simple wrapper around System.Diagnostics.Process to expose it as a System.Threading.Tasks.Task

License

Notifications You must be signed in to change notification settings

MaxCheetham/RunProcessAsTask

 
 

Repository files navigation

RunProcessAsTask

Travis Build Status AppVeyor Coveralls

GitHub issues GitHub stars GitHub forks GitHub license

NuGet

Simple wrapper around System.Diagnostics.Process to expose it as a System.Threading.Tasks.Task<ProcessResults>

Includes support for cancellation, timeout (via cancellation), and exposes the standard output, standard error, exit code, and run time of the process.

To install into your project:

PM> Install-Package RunProcessAsTask

Example Usages

Synchronous, just easier way of grabbing output / error / runtime for the process

var processResults = ProcessEx.RunAsync("git.exe", "pull").Result;

Console.WriteLine("Exit code: " + processResults.ExitCode);
Console.WriteLine("Run time: " + processResults.RunTime);

Console.WriteLine("{0} lines of standard output", processResults.StandardOutput.Length);
foreach (var output in processResults.StandardOutput)
{
    Console.WriteLine("Output line: " + output);
}

Console.WriteLine("{0} lines of standard error", processResults.StandardError.Length);
foreach (var error in processResults.StandardError)
{
    Console.WriteLine("Error line: " + error);
}

Provide timeout for running process

public async Task RunCommandWithTimeout(string filename, string arguments, TimeSpan timeout)
{
    var processStartInfo = new ProcessStartInfo
    {
        FileName = filename,
        Arguments = arguments,
    };
    try
    {
        using (var cancellationTokenSource = new CancellationTokenSource(timeout))
        {
            var processResults = await ProcessEx.RunAsync(processStartInfo, cancellationTokenSource.Token);
        }
    }
    catch (OperationCanceledException)
    {
        Console.WriteLine("Timeout of {0} hit while trying to run {1} {2}", timeout, filename, arguments);
    }
}

Run multiple commands with dependencies in an async fashion

public async Task ShowLastMatchingCommit(string regex)
{
    var logProcessResults = await ProcessEx.RunAsync("git.exe", "log --pretty=oneline --all -n 1 -G" + regex);
    if (logProcessResults.ExitCode != 0) return;

    var stdoutSplit = logProcessResults.StandardOutput[0].Split(new[] { ' ' }, 2);
    var commitHash = stdoutSplit[0];
    var commitMessage = stdoutSplit[1];
    Console.WriteLine("Last commit matching {0} was {1} and had commit message {2}", regex, commitHash, commitMessage);
    var showProcessResults = await ProcessEx.RunAsync("git.exe", "show --pretty=fuller " + commitHash);
    foreach (var stdoutLine in showProcessResults.StandardOutput)
    {
        Console.WriteLine("git show output: " + stdoutLine);
    }
}

About

Simple wrapper around System.Diagnostics.Process to expose it as a System.Threading.Tasks.Task

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%