private void SetupEnvironmentConfiguration() { Log log = Log; _pipelineConfiguration["PipelineLogger"] = log; CompleteCallback completeCallback = MiddlewareExecutionCompleted; _pipelineConfiguration["PipelineSuccessCallback"] = completeCallback; AbortCallback abortCallback = MiddlewareExecutionAborted; _pipelineConfiguration["PipelineAbortCallback"] = abortCallback; _middlewares.ForEach(middleware => middleware.AddPipelineConfiguration(_pipelineConfiguration)); }
public void RunMethodAsync(SelfContainedMethod method, SuccessCallback successCallback, AbortCallback abortCallback) { ThreadPool.QueueUserWorkItem(delegate { ExecutionThread = Thread.CurrentThread; // Register kill thread Stopwatch sw = new Stopwatch(); sw.Start(); try { ThreadPool.QueueUserWorkItem(delegate { Thread.Sleep(2000); using (CAutoMutex autoMutex = new CAutoMutex(mutex)) { if (null != ExecutionThread) { ExecutionThread.Abort(); ExecutionThread.Join(); } } }); object output = method(); sw.Stop(); using (CAutoMutex autoMutex = new CAutoMutex(mutex)) { successCallback(sw.ElapsedMilliseconds, output); ExecutionThread = null; } } catch (ThreadAbortException) { Thread.ResetAbort(); abortCallback(sw.ElapsedMilliseconds); } }); }