/// <summary> /// This method executes a workflow that will fail. A popup is forced so KNIME blocks. /// A second thread is spawned that will abort the execution and kill KNIME. /// </summary> /// <returns></returns> public static async Task <ExitStatus> FailingExecutionAfterCancel() { var output = new EventBasedTextWriter(); var error = new EventBasedTextWriter(); output.OnWriteLine += OnOutputReceived; error.OnWriteLine += OnErrorReceived; var shellProxy = new ShellProxy(KnimeDir) { Arguments = { WorkFlowDir = FailingWorkFlow, SuppressErrors = false // provoke blocking KNIME instance in case the workflow ends too fast }, KillOnError = true, }; #pragma warning disable 4014 Task.Run(() => CancelKnime(shellProxy)); // parallel cancel helper #pragma warning restore 4014 var exitStatus = await shellProxy.StartKnime(null, output, error).ConfigureAwait(false); Console.WriteLine("Killed KNIME successfully? " + exitStatus.KilledProcess); return(exitStatus); }
/// <summary> /// This example executes a workflow that ends without errors and binds the output/error to event based textwriters. /// </summary> /// <returns></returns> public static async Task <ExitStatus> SucceedingExecutionWithEventBasedBinding() { var output = new EventBasedTextWriter(); var error = new EventBasedTextWriter(); output.OnWriteLine += OnOutputReceived; error.OnWriteLine += OnErrorReceived; var shellProxy = new ShellProxy(KnimeDir) { Arguments = { WorkFlowDir = SucceedingWorkFlow } }; var exitStatus = await shellProxy.StartKnime(null, output, error); return(exitStatus); }
/// <summary> /// This method executes a workflow that will fail. A popup is forced so KNIME blocks. /// After a timeout is reached KNIME will be killed. /// </summary> /// <returns></returns> private static async Task <ExitStatus> FailingExecutionAfterTimeout() { var output = new EventBasedTextWriter(); var error = new EventBasedTextWriter(); output.OnWriteLine += OnOutputReceived; error.OnWriteLine += OnErrorReceived; var shellProxy = new ShellProxy(KnimeDir) { Arguments = { WorkFlowDir = FailingWorkFlow, SuppressErrors = false // provoke blocking KNIME instance in case the workflow ends too fast }, KillOnError = true, Timeout = 20 }; var exitStatus = await shellProxy.StartKnime(null, output, error).ConfigureAwait(false); Console.WriteLine("Killed KNIME successfully? " + exitStatus.KilledProcess); return(exitStatus); }