Esempio n. 1
0
        /// <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());
            }
        }
Esempio n. 2
0
        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));
        }