/// <summary> /// Encapsulates the execution of the activity in a timebound code block /// </summary> /// <param name="doFunc">The function that would be executed in a time block, true if it was succesful, false otherwise</param> /// <param name="context">The execution context</param> protected virtual void DoExecute(Func <bool> doFunc, CodeActivityContext context) { var timeoutVal = TimeoutInMinutes.Get(context); if (timeoutVal == 0) { timeoutVal = 15; } var task = Task.Run(() => { return(doFunc()); }); try { var waitResult = task.Wait(TimeSpan.FromMinutes(timeoutVal)); WasTimeout.Set(context, waitResult); var executionResult = task.Result; WasSuccess.Set(context, waitResult && executionResult); if (waitResult) { Message.Set(context, "Operation timed out"); } } catch (Exception ex) { Trace.TraceError("Failed to complete operation with {0}", ex); WasSuccess.Set(context, false); Message.Set(context, ex.ToString()); } }
private void WaitForCompleteSignal(CodeActivityContext context) { var session = Utils.GetSessionName() + "_BACK"; var fileShareRec = new ProcessShare(session); Trace.TraceInformation("Waiting for complete signal on session {0}", session); var st = DateTime.UtcNow; fileShareRec.WaitForText("complete", TimeSpan.FromMinutes(TimeoutInMinutes.Get(context))); Trace.TraceInformation("Finished wait on session {0} after {1}", session, DateTime.UtcNow.Subtract(st)); }