コード例 #1
0
        protected void CoreProcessRequest()
        {
            try {
                bool transacted = protocol.MethodAttribute.TransactionEnabled;
                if (protocol.IsOneWay)
                {
                    WorkItemCallback callback = null;
                    if (protocol.OnewayInitException != null)
                    {
                        callback = new WorkItemCallback(this.ThrowInitException);
                    }
                    else
                    {
                        callback = transacted ? new WorkItemCallback(this.OneWayInvokeTransacted) : new WorkItemCallback(this.OneWayInvoke);
                    }
                    WorkItem.Post(callback);
                    protocol.WriteOneWayResponse();
                }
                else if (transacted)
                {
                    InvokeTransacted();
                }
                else
                {
                    Invoke();
                }
            }
            catch (Exception e) {
                WriteException(e);
            }

            TraceFlush();
        }
コード例 #2
0
        /// <summary>
        /// Queue a work item
        /// </summary>
        /// <param name="callback">A callback to execute</param>
        /// <param name="workItemPriority">The priority of the work item</param>
        /// <returns>Returns a work item result</returns>
        public IWorkItemResult QueueWorkItem(WorkItemCallback callback, WorkItemPriority workItemPriority)
        {
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, callback, workItemPriority);

            Enqueue(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #3
0
        public IWorkItemResult QueueWorkItem(WorkItemCallback callback)
        {
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, this.WIGStartInfo, callback);

            this.Enqueue(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #4
0
ファイル: Page.xaml.cs プロジェクト: dyb628/smartthreadpool
        private void WorkItemsProducer()
        {
            WorkItemCallback workItemCallback = DoWork;

            while (running)
            {
                IWorkItemsGroup workItemsGroup = _stp;
                if (null == workItemsGroup)
                {
                    return;
                }

                try
                {
                    workItemsGroup.QueueWorkItem(workItemCallback);
                }
                catch (ObjectDisposedException e)
                {
                    e.GetHashCode();
                    break;
                }
                workItemsGenerated++;
                Thread.Sleep(_interval);
            }
        }
コード例 #5
0
        /// <summary>
        /// Create a new work item
        /// </summary>
        /// <param name="workItemsGroup">The WorkItemsGroup of this workitem</param>
        /// <param name="wigStartInfo">Work item group start information</param>
        /// <param name="callback">A callback to execute</param>
        /// <param name="state">
        /// The context object of the work item. Used for passing arguments to the work item.
        /// </param>
        /// <returns>Returns a work item</returns>
        public static WorkItem CreateWorkItem(
            IWorkItemsGroup workItemsGroup,
            WIGStartInfo wigStartInfo,
            WorkItemCallback callback,
            object state)
        {
            ValidateCallback(callback);

            WorkItemInfo workItemInfo = new WorkItemInfo();

            workItemInfo.UseCallerCallContext        = wigStartInfo.UseCallerCallContext;
            workItemInfo.UseCallerHttpContext        = wigStartInfo.UseCallerHttpContext;
            workItemInfo.PostExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback;
            workItemInfo.CallToPostExecute           = wigStartInfo.CallToPostExecute;
            workItemInfo.DisposeOfStateObjects       = wigStartInfo.DisposeOfStateObjects;
            workItemInfo.WorkItemPriority            = wigStartInfo.WorkItemPriority;

            WorkItem workItem = new WorkItem(
                workItemsGroup,
                workItemInfo,
                callback,
                state);

            return(workItem);
        }
コード例 #6
0
 /// <summary>
 /// Create a new work item
 /// </summary>
 /// <param name="workItemsGroup">The WorkItemsGroup of this workitem</param>
 /// <param name="wigStartInfo">Work item group start information</param>
 /// <param name="callback">A callback to execute</param>
 /// <returns>Returns a work item</returns>
 public static WorkItem CreateWorkItem(
     IWorkItemsGroup workItemsGroup,
     WIGStartInfo wigStartInfo,
     WorkItemCallback callback)
 {
     return(CreateWorkItem(workItemsGroup, wigStartInfo, callback, null));
 }
コード例 #7
0
        private void WorkItemsProducer()
        {
            WorkItemCallback workItemCallback = new WorkItemCallback(this.DoWork);

            while (running)
            {
                IWorkItemsGroup workItemsGroup = _workItemsGroup;
                if (null == workItemsGroup)
                {
                    return;
                }

                try
                {
                    workItemCallback = new WorkItemCallback(this.DoWork);
                    workItemsGroup.QueueWorkItem(workItemCallback);
                }
                catch (ObjectDisposedException e)
                {
                    e.GetHashCode();
                    break;
                }
                workItemsGenerated++;
                Thread.Sleep(Convert.ToInt32(spinInterval.Value));
            }
        }
コード例 #8
0
        /// <summary>
        /// 加入工作项
        /// </summary>
        /// <param name="callback">执行的方法</param>
        /// <param name="packet">方法的入参</param>
        /// <param name="priority">执行的优先级</param>
        public void Enqueue(WorkItemCallback callback, T packet, WorkItemPriority priority)
        {
            if (callback == null)
            {
                return;
            }
            int level = 0;
            int count = this._queue.Count;

            if (this._list[this._list.Length - 1] < count)
            {
                level = this._list.Length - 1;
            }
            else
            {
                for (int i = 0; i < this._list.Length - 1; i++)
                {
                    if (count > this._list[i] && count < this._list[i + 1])
                    {
                        level = i;
                        break;
                    }
                }
            }
            LevelArrivedEventArgs <T> eventArgs = new LevelArrivedEventArgs <T>()
            {
                CancelEnqueue = false, LevelNumber = level, Packet = packet
            };

            if (level > 0 && this.OnLevelArrived != null)
            {
                this.OnLevelArrived(this, eventArgs);
            }
            if (!eventArgs.CancelEnqueue)
            {
                if (this.MaxThreadsNumber == 0)
                {
                    this._threadPool.QueueWorkItem(callback, packet, priority);
#if DEBUG
                    bool flag = false;
                    if ((DateTime.Now - this._lastWriteTime).TotalSeconds > 1)
                    {
                        flag = true;
                        this._lastWriteTime = DateTime.Now;
                    }
                    if (flag)
                    {
                        Console.WriteLine(String.Format("[{2}]完成:{0,5:#####}|{1,-5:#####}", this._queue.Count, this._threadPool.WaitingCallbacks, this.Name));
                    }
#endif
                }
                else
                {
                    this._queue.Enqueue(new WAITQUEUESTRUCTURE()
                    {
                        Callback = callback, Packet = packet
                    });
                }
            }
        }
コード例 #9
0
 /// <summary>
 ///   Create a new work item
 /// </summary>
 /// <param name = "wigStartInfo">Work item group start information</param>
 /// <param name = "callback">A callback to execute</param>
 /// <returns>Returns a work item</returns>
 public static WorkItem CreateWorkItem(
     IWorkItemsGroup workItemsGroup,
     WIGStartInfo wigStartInfo,
     WorkItemCallback callback)
 {
     return CreateWorkItem(workItemsGroup, wigStartInfo, callback, null);
 }
コード例 #10
0
        /// <summary>
        /// Initialize the callback holding object.
        /// </summary>
        /// <param name="workItemsGroup">The workItemGroup of the workitem</param>
        /// <param name="workItemInfo">The WorkItemInfo of te workitem</param>
        /// <param name="callback">Action delegate for the callback.</param>
        /// <param name="state">Items with which to call the callback delegate.</param>
        ///
        /// We assume that the WorkItem object is created within the thread
        /// that meant to run the callback
        public WorkItem(
            IWorkItemsGroup workItemsGroup,
            WorkItemInfo workItemInfo,
            WorkItemCallback callback,
            object state)
        {
            if (null == workItemInfo)
            {
                throw new ArgumentNullException("workItemInfo");
            }

            _workItemsGroup = workItemsGroup;
            _workItemInfo   = workItemInfo;

#if !(_WINDOWS_CE) && !(_SILVERLIGHT)
            if (_workItemInfo.UseCallerCallContext || _workItemInfo.UseCallerHttpContext)
            {
                _callerContext = CallerThreadContext.Capture(_workItemInfo.UseCallerCallContext, _workItemInfo.UseCallerHttpContext);
            }
#endif

            _callback       = callback;
            _state          = state;
            _workItemResult = new WorkItemResult(this);
            Initialize();
        }
コード例 #11
0
        /// <summary>
        /// Create a new work item
        /// </summary>
        /// <param name="workItemsGroup">The work items group</param>
        /// <param name="wigStartInfo">Work item group start information</param>
        /// <param name="callback">A callback to execute</param>
        /// <param name="state">
        /// The context object of the work item. Used for passing arguments to the work item.
        /// </param>
        /// <param name="postExecuteWorkItemCallback">
        /// A delegate to call after the callback completion
        /// </param>
        /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
        /// <param name="workItemPriority">The work item priority</param>
        /// <returns>Returns a work item</returns>
        public static WorkItem CreateWorkItem(
            IWorkItemsGroup workItemsGroup,
            WIGStartInfo wigStartInfo,
            WorkItemCallback callback,
            object state,
            PostExecuteWorkItemCallback postExecuteWorkItemCallback,
            CallToPostExecute callToPostExecute,
            WorkItemPriority workItemPriority)
        {
            if (null == wigStartInfo)
            {
                throw new ArgumentNullException("wigStartInfo");
            }

            ValidateCallback(callback);
            ValidateCallback(postExecuteWorkItemCallback);

            WorkItemInfo workItemInfo = new WorkItemInfo();

            workItemInfo.UseCallerCallContext        = wigStartInfo.UseCallerCallContext;
            workItemInfo.UseCallerHttpContext        = wigStartInfo.UseCallerHttpContext;
            workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
            workItemInfo.CallToPostExecute           = callToPostExecute;
            workItemInfo.WorkItemPriority            = workItemPriority;
            workItemInfo.DisposeOfStateObjects       = wigStartInfo.DisposeOfStateObjects;

            WorkItem workItem = new WorkItem(
                workItemsGroup,
                workItemInfo,
                callback,
                state);

            return(workItem);
        }
コード例 #12
0
        /// <summary>
        /// Queue a work item
        /// </summary>
        /// <param name="callback">A callback to execute</param>
        /// <param name="state">
        /// The context object of the work item. Used for passing arguments to the work item.
        /// </param>
        /// <returns>Returns a work item result</returns>
        public IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state)
        {
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, callback, state);

            Enqueue(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #13
0
        protected void CoreProcessRequest()
        {
            try {
                bool transacted = protocol.MethodAttribute.TransactionEnabled;
                if (protocol.IsOneWay)
                {
                    WorkItemCallback callback       = null;
                    TraceMethod      callbackMethod = null;
                    if (protocol.OnewayInitException != null)
                    {
                        callback       = new WorkItemCallback(this.ThrowInitException);
                        callbackMethod = Tracing.On ? new TraceMethod(this, "ThrowInitException") : null;
                    }
                    else
                    {
                        parameters     = protocol.ReadParameters();
                        callback       = transacted ? new WorkItemCallback(this.OneWayInvokeTransacted) : new WorkItemCallback(this.OneWayInvoke);
                        callbackMethod = Tracing.On ? transacted ? new TraceMethod(this, "OneWayInvokeTransacted") : new TraceMethod(this, "OneWayInvoke") : null;
                    }

                    if (Tracing.On)
                    {
                        Tracing.Information(Res.TracePostWorkItemIn, callbackMethod);
                    }
                    WorkItem.Post(callback);
                    if (Tracing.On)
                    {
                        Tracing.Information(Res.TracePostWorkItemOut, callbackMethod);
                    }

                    protocol.WriteOneWayResponse();
                }
                else if (transacted)
                {
                    parameters = protocol.ReadParameters();
                    InvokeTransacted();
                }
                else
                {
                    parameters = protocol.ReadParameters();
                    Invoke();
                }
            }
            catch (Exception e) {
                if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException)
                {
                    throw;
                }
                if (Tracing.On)
                {
                    Tracing.ExceptionCatch(TraceEventType.Error, this, "CoreProcessRequest", e);
                }
                if (!protocol.IsOneWay)
                {
                    WriteException(e);
                }
            }

            TraceFlush();
        }
コード例 #14
0
        /// <summary>
        /// Callback method to handle received messages.  The AsyncSocketClient
        /// library calls this; don't call it yourself.
        /// </summary>
        /// <param name="client">The client to receive messages from.</param>
        internal void ClientMessageHandler(AsyncSocketClient client)
        {
            Queue responseQueue = null;

            try
            {
                byte[] buffer     = client.Buffer;
                int    bufferSize = client.BufferSize;
                responseQueue = UapFactory.GetUapQueue(ref buffer, ref bufferSize);
                Array.Copy(buffer, client.Buffer, bufferSize);
                client.BufferSize = bufferSize;
            }
            catch (Exception ex)
            {
                DebugHelper.WriteLog("解析Pdu失败,错误信息:" + ex.Message);
            }
            try
            {
                if (responseQueue != null)
                {
                    foreach (UapBase response in responseQueue)
                    {
                        if (response != null)
                        {
                            WorkItemCallback callback = new WorkItemCallback(this.ProcessPdu);
                            this._queuePool.Enqueue(callback, response);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                //OnError(this, new CommonErrorEventArgs(exception));
            }
        }
コード例 #15
0
        /// <summary>
        ///   Create a new work item
        /// </summary>
        /// <param name = "wigStartInfo">Work item group start information</param>
        /// <param name = "callback">A callback to execute</param>
        /// <param name = "state">
        ///   The context object of the work item. Used for passing arguments to the work item.
        /// </param>
        /// <param name = "postExecuteWorkItemCallback">
        ///   A delegate to call after the callback completion
        /// </param>
        /// <param name = "callToPostExecute">Indicates on which cases to call to the post execute callback</param>
        /// <param name = "workItemPriority">The work item priority</param>
        /// <returns>Returns a work item</returns>
        public static WorkItem CreateWorkItem(
            IWorkItemsGroup workItemsGroup,
            WIGStartInfo wigStartInfo,
            WorkItemCallback callback,
            object state,
            PostExecuteWorkItemCallback postExecuteWorkItemCallback,
            CallToPostExecute callToPostExecute,
            WorkItemPriority workItemPriority)
        {
            ValidateCallback(callback);
            ValidateCallback(postExecuteWorkItemCallback);

            WorkItemInfo workItemInfo = new WorkItemInfo
            {
                UseCallerCallContext        = wigStartInfo.UseCallerCallContext,
                UseCallerHttpContext        = wigStartInfo.UseCallerHttpContext,
                PostExecuteWorkItemCallback = postExecuteWorkItemCallback,
                CallToPostExecute           = callToPostExecute,
                WorkItemPriority            = workItemPriority,
                DisposeOfStateObjects       = wigStartInfo.DisposeOfStateObjects
            };

            WorkItem workItem = new WorkItem(
                workItemsGroup,
                workItemInfo,
                callback,
                state);

            return(workItem);
        }
コード例 #16
0
ファイル: WorkItemsGroup.cs プロジェクト: genums/TPCCBench
        /// <summary>
        /// Queue a work item
        /// </summary>
        /// <param name="workItemInfo">Work item info</param>
        /// <param name="callback">A callback to execute</param>
        /// <returns>Returns a work item result</returns>
        public IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback)
        {
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, workItemInfo, callback);

            EnqueueToSTPNextWorkItem(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #17
0
ファイル: WorkItem.cs プロジェクト: ikarosghoste/opensim
        public void DisposeOfState()
        {
            if (_callerContext != null)
            {
                _callerContext.Dispose();
                _callerContext = null;
            }

            if (_workItemCompleted != null)
            {
                _workItemCompleted.Dispose();
                _workItemCompleted = null;
            }

            if (_workItemInfo.DisposeOfStateObjects)
            {
                IDisposable disp = _state as IDisposable;
                if (null != disp)
                {
                    disp.Dispose();
                    _state = null;
                }
            }
            _callback         = null;
            _callbackNoResult = null;
        }
コード例 #18
0
        /// <summary>
        /// Queue a work item
        /// </summary>
        /// <param name="callback">A callback to execute</param>
        /// <param name="state">
        /// The context object of the work item. Used for passing arguments to the work item.
        /// </param>
        /// <param name="postExecuteWorkItemCallback">
        /// A delegate to call after the callback completion
        /// </param>
        /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
        /// <param name="workItemPriority">The work item priority</param>
        /// <returns>Returns a work item result</returns>
        public IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback, CallToPostExecute callToPostExecute, WorkItemPriority workItemPriority)
        {
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, this._workItemsGroupStartInfo, callback, state, postExecuteWorkItemCallback, callToPostExecute, workItemPriority);

            this.EnqueueToSTPNextWorkItem(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #19
0
        /// <summary>
        /// Queue a work item
        /// </summary>
        /// <param name="callback">A callback to execute</param>
        /// <param name="state">
        /// The context object of the work item. Used for passing arguments to the work item.
        /// </param>
        /// <returns>Returns a work item result</returns>
        public IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state)
        {
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, this._workItemsGroupStartInfo, callback, state);

            this.EnqueueToSTPNextWorkItem(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #20
0
 protected void CoreProcessRequest()
 {
     try
     {
         bool transactionEnabled = this.protocol.MethodAttribute.TransactionEnabled;
         if (this.protocol.IsOneWay)
         {
             WorkItemCallback callback = null;
             TraceMethod      method   = null;
             if (this.protocol.OnewayInitException != null)
             {
                 callback = new WorkItemCallback(this.ThrowInitException);
                 method   = Tracing.On ? new TraceMethod(this, "ThrowInitException", new object[0]) : null;
             }
             else
             {
                 this.parameters = this.protocol.ReadParameters();
                 callback        = transactionEnabled ? new WorkItemCallback(this.OneWayInvokeTransacted) : new WorkItemCallback(this.OneWayInvoke);
                 method          = Tracing.On ? (transactionEnabled ? new TraceMethod(this, "OneWayInvokeTransacted", new object[0]) : new TraceMethod(this, "OneWayInvoke", new object[0])) : null;
             }
             if (Tracing.On)
             {
                 Tracing.Information("TracePostWorkItemIn", new object[] { method });
             }
             WorkItem.Post(callback);
             if (Tracing.On)
             {
                 Tracing.Information("TracePostWorkItemOut", new object[] { method });
             }
             this.protocol.WriteOneWayResponse();
         }
         else if (transactionEnabled)
         {
             this.parameters = this.protocol.ReadParameters();
             this.InvokeTransacted();
         }
         else
         {
             this.parameters = this.protocol.ReadParameters();
             this.Invoke();
         }
     }
     catch (Exception exception)
     {
         if (((exception is ThreadAbortException) || (exception is StackOverflowException)) || (exception is OutOfMemoryException))
         {
             throw;
         }
         if (Tracing.On)
         {
             Tracing.ExceptionCatch(TraceEventType.Error, this, "CoreProcessRequest", exception);
         }
         if (!this.protocol.IsOneWay)
         {
             this.WriteException(exception);
         }
     }
     TraceFlush();
 }
コード例 #21
0
        /// <summary>
        /// Queue a work item
        /// </summary>
        /// <param name="workItemInfo">Work item info</param>
        /// <param name="callback">A callback to execute</param>
        /// <returns>Returns a work item result</returns>
        public IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback)
        {
            PreQueueWorkItem();
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, workItemInfo, callback);

            Enqueue(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #22
0
        public IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback, CallToPostExecute callToPostExecute, WorkItemPriority workItemPriority)
        {
            this.PreQueueWorkItem();
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, this.WIGStartInfo, callback, state, postExecuteWorkItemCallback, callToPostExecute, workItemPriority);

            this.Enqueue(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #23
0
 public static void Post(WorkItemCallback callback)
 {
     if (Environment.OSVersion.Platform != PlatformID.Win32NT)
     {
         throw new PlatformNotSupportedException(System.Web.SR.GetString("RequiresNT"));
     }
     PostInternal(callback);
 }
コード例 #24
0
        public IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback, object state)
        {
            this.PreQueueWorkItem();
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, this.WIGStartInfo, workItemInfo, callback, state);

            this.Enqueue(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #25
0
 public static void Post(WorkItemCallback callback)
 {
     if (Environment.OSVersion.Platform != PlatformID.Win32NT)
     {
         throw new PlatformNotSupportedException(System.Web.SR.GetString("RequiresNT"));
     }
     PostInternal(callback);
 }
コード例 #26
0
    public static void Post(WorkItemCallback callback) {
#if !FEATURE_PAL // ROTORTODO
        if (Environment.OSVersion.Platform != PlatformID.Win32NT)
            throw new PlatformNotSupportedException(SR.GetString(SR.RequiresNT));
#else // !FEATURE_PAL
        throw new NotImplementedException("ROTORTODO");
#endif // !FEATURE_PAL
        PostInternal(callback);
    }
コード例 #27
0
        private ArrayList _staComponents;        // list of STA components to be released

        internal AspCompatApplicationStep(HttpContext context, AspCompatCallback code)
        {
            _context = context;

            _app          = context.ApplicationInstance;
            _code         = code;
            _execCallback = new AspCompatCallback(this.OnAspCompatExecution);
            _compCallback = new WorkItemCallback(this.OnAspCompatCompletion);
        }
コード例 #28
0
 internal static void PostInternal(WorkItemCallback callback) {
     if (_useQueueUserWorkItem) {
         ThreadPool.QueueUserWorkItem(_onQueueUserWorkItemCompletion, callback);
     }
     else {
         WrappedWorkItemCallback w = new WrappedWorkItemCallback(callback);
         w.Post();
     }
 }
コード例 #29
0
        private static void OnQueueUserWorkItemCompletion(object state)
        {
            WorkItemCallback callback = state as WorkItemCallback;

            if (callback != null)
            {
                CallCallbackWithAssert(callback);
            }
        }
コード例 #30
0
        /// <summary>
        /// Queue a work item
        /// </summary>
        /// <param name="callback">A callback to execute</param>
        /// <param name="state">
        /// The context object of the work item. Used for passing arguments to the work item.
        /// </param>
        /// <param name="postExecuteWorkItemCallback">
        /// A delegate to call after the callback completion
        /// </param>
        /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
        /// <param name="workItemPriority">The work item priority</param>
        /// <returns>Returns a work item result</returns>
        public IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback, CallToPostExecute callToPostExecute, WorkItemPriority workItemPriority)
        {
            this.ValidateNotDisposed();
            this.ValidateCallback(callback);
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, this._stpStartInfo, callback, state, postExecuteWorkItemCallback, callToPostExecute, workItemPriority);

            this.Enqueue(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #31
0
        /// <summary>
        /// Queue a work item
        /// </summary>
        /// <param name="workItemInfo">Work item information</param>
        /// <param name="callback">A callback to execute</param>
        /// <param name="state">
        /// The context object of the work item. Used for passing arguments to the work item.
        /// </param>
        /// <returns>Returns a work item result</returns>
        public IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback, object state)
        {
            this.ValidateNotDisposed();
            this.ValidateCallback(callback);
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, this._stpStartInfo, workItemInfo, callback, state);

            this.Enqueue(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #32
0
        /// <summary>
        /// Queue a work item
        /// </summary>
        /// <param name="callback">A callback to execute</param>
        /// <param name="state">
        /// The context object of the work item. Used for passing arguments to the work item.
        /// </param>
        /// <param name="postExecuteWorkItemCallback">
        /// A delegate to call after the callback completion
        /// </param>
        /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
        /// <returns>Returns a work item result</returns>
        public IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state,
                                             PostExecuteWorkItemCallback postExecuteWorkItemCallback, CallToPostExecute callToPostExecute)
        {
            PreQueueWorkItem();
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, callback, state, postExecuteWorkItemCallback, callToPostExecute);

            Enqueue(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #33
0
 /// <summary>
 /// Initialize the callback holding object.
 /// </summary>
 /// <param name="workItemsGroup">The workItemGroup of the workitem</param>
 /// <param name="workItemInfo">The WorkItemInfo of te workitem</param>
 /// <param name="callback">Callback delegate for the callback.</param>
 /// <param name="state">State with which to call the callback delegate.</param>
 ///
 /// We assume that the WorkItem object is created within the thread
 /// that meant to run the callback
 public WorkItem(IWorkItemsGroup workItemsGroup, WorkItemInfo workItemInfo, WorkItemCallback callback, object state)
 {
     _workItemsGroup = workItemsGroup;
     _workItemInfo   = workItemInfo;
     _callback       = callback;
     _state          = state;
     _workItemResult = new WorkItemResult(this);
     Initialize();
 }
コード例 #34
0
        /// <summary>
        /// Queue a work item
        /// </summary>
        /// <param name="callback">A callback to execute</param>
        /// <param name="state">
        /// The context object of the work item. Used for passing arguments to the work item.
        /// </param>
        /// <param name="postExecuteWorkItemCallback">
        /// A delegate to call after the callback completion
        /// </param>
        /// <returns>Returns a work item result</returns>
        public IWorkItemResult QueueWorkItem(
            WorkItemCallback callback,
            object state,
            PostExecuteWorkItemCallback postExecuteWorkItemCallback)
        {
            WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, callback, state, postExecuteWorkItemCallback);

            EnqueueToSTPNextWorkItem(workItem);
            return(workItem.GetWorkItemResult());
        }
コード例 #35
0
        public void ChainedDelegatesCallback()
        {
            SmartThreadPool stp = new SmartThreadPool();

            WorkItemCallback workItemCallback = new WorkItemCallback(DoWork);
            workItemCallback += new WorkItemCallback(DoWork);

            stp.QueueWorkItem(workItemCallback);

            stp.WaitForIdle();

            stp.Shutdown();
        }
コード例 #36
0
 // Token: 0x0600185F RID: 6239
 // RVA: 0x00075274 File Offset: 0x00073474
 public static WorkItem CreateWorkItem(IWorkItemsGroup iworkItemsGroup_0, WIGStartInfo wigstartInfo_0, WorkItemCallback workItemCallback_0, object object_0, WorkItemPriority workItemPriority_0)
 {
     WorkItemFactory.ValidateCallback(workItemCallback_0);
     return new WorkItem(iworkItemsGroup_0, new WorkItemInfo
     {
         UseCallerCallContext = wigstartInfo_0.UseCallerCallContext,
         UseCallerHttpContext = wigstartInfo_0.UseCallerHttpContext,
         PostExecuteWorkItemCallback = wigstartInfo_0.PostExecuteWorkItemCallback,
         CallToPostExecute = wigstartInfo_0.CallToPostExecute,
         DisposeOfStateObjects = wigstartInfo_0.DisposeOfStateObjects,
         WorkItemPriority = workItemPriority_0
     }, workItemCallback_0, object_0);
 }
コード例 #37
0
        public void ChainedDelegatesCallback()
        {
            SmartThreadPool smartThreadPool = new SmartThreadPool();
            IWorkItemsGroup workItemsGroup = smartThreadPool.CreateWorkItemsGroup(int.MaxValue);

            WorkItemCallback workItemCallback = new WorkItemCallback(DoWork);
            workItemCallback += new WorkItemCallback(DoWork);

            workItemsGroup.QueueWorkItem(workItemCallback);

            workItemsGroup.WaitForIdle();

            smartThreadPool.Shutdown();
        }
コード例 #38
0
ファイル: WorkItem.cs プロジェクト: Gameman/PlayStudio
        internal WorkItem(Delegate func, object[] state)
        {
            _state = state;
            _stuck = func.Method.ReturnType != typeof(void);

            _callback = new WorkItemCallback(
                delegate {
                    if (_stuck) {
                        return func.Method.Invoke(func.Target, state);
                    }
                    else {
                        func.Method.Invoke(func.Target, state);
                        return null;
                    }
                });
        }
コード例 #39
0
        public void ChainedDelegatesCallback()
        {
            Assert.Throws<NotSupportedException>(() =>
            {

                SmartThreadPool stp = new SmartThreadPool();

                WorkItemCallback workItemCallback = new WorkItemCallback(DoWork);
                workItemCallback += new WorkItemCallback(DoWork);

                stp.QueueWorkItem(workItemCallback);

                stp.WaitForIdle();

                stp.Shutdown();
            });
        }
コード例 #40
0
        public void ChainedDelegatesCallback()
        {
            Assert.Throws<NotSupportedException>(() =>
            {

                SmartThreadPool smartThreadPool = new SmartThreadPool();
                IWorkItemsGroup workItemsGroup = smartThreadPool.CreateWorkItemsGroup(int.MaxValue);

                WorkItemCallback workItemCallback = new WorkItemCallback(DoWork);
                workItemCallback += new WorkItemCallback(DoWork);

                workItemsGroup.QueueWorkItem(workItemCallback);

                workItemsGroup.WaitForIdle();

                smartThreadPool.Shutdown();
            });
        }
コード例 #41
0
        /// <summary>
        /// Create a new work item
        /// </summary>
        /// <param name="workItemsGroup"></param>
        /// <param name="wigStartInfo">Work item group start information</param>
        /// <param name="callback">A callback to execute</param>
        /// <param name="state">
        /// The context object of the work item. Used for passing arguments to the work item. 
        /// </param>
        /// <returns>Returns a work item</returns>
        public static WorkItem CreateWorkItem(
			IWorkItemsGroup workItemsGroup,
			WIGStartInfo wigStartInfo,
			WorkItemCallback callback, 
			object state)
        {
            ValidateCallback(callback);

            WorkItemInfo workItemInfo = new WorkItemInfo();
            workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
            workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
            workItemInfo.PostExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback;
            workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
            workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;

            WorkItem workItem = new WorkItem(
                workItemsGroup,
                workItemInfo,
                callback,
                state);
            return workItem;
        }
コード例 #42
0
        /// <summary>
        ///   Create a new work item
        /// </summary>
        /// <param name = "wigStartInfo">Work item group start information</param>
        /// <param name = "workItemInfo">Work item information</param>
        /// <param name = "callback">A callback to execute</param>
        /// <param name = "state">
        ///   The context object of the work item. Used for passing arguments to the work item. 
        /// </param>
        /// <returns>Returns a work item</returns>
        public static WorkItem CreateWorkItem(
            IWorkItemsGroup workItemsGroup,
            WIGStartInfo wigStartInfo,
            WorkItemInfo workItemInfo,
            WorkItemCallback callback,
            object state)
        {
            ValidateCallback(callback);
            ValidateCallback(workItemInfo.PostExecuteWorkItemCallback);

            WorkItem workItem = new WorkItem(
                workItemsGroup,
                new WorkItemInfo(workItemInfo),
                callback,
                state);

            return workItem;
        }
コード例 #43
0
ファイル: IrrManager.cs プロジェクト: foxracle/3di-viewer-rei
 public IrrWorkItem(string name, WorkItemCallback callback, object arg)
 {
     this.name = name;
     this.callback = callback;
     this.arg = arg;
     this.retry = 0;
 }
コード例 #44
0
 /// <summary>
 /// Queue a work item
 /// </summary>
 /// <param name="callback">A callback to execute</param>
 /// <param name="workItemPriority">The priority of the work item</param>
 /// <returns>Returns a work item result</returns>
 public IWorkItemResult QueueWorkItem(WorkItemCallback callback, WorkItemPriority workItemPriority)
 {
     WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, callback,
                                                        workItemPriority);
     EnqueueToSTPNextWorkItem(workItem);
     return workItem.GetWorkItemResult();
 }
コード例 #45
0
ファイル: WorkItem.cs プロジェクト: nobled/mono
		public static void Post (WorkItemCallback callback)
		{
			// note: this is the documented exception for (Windows) OS prior to NT
			// so in this case we won't throw a NotImplementedException
			throw new PlatformNotSupportedException ("Not supported on mono");
		}
コード例 #46
0
	    /// <summary>
	    /// Initialize the callback holding object.
	    /// </summary>
	    /// <param name="workItemsGroup"></param>
	    /// <param name="workItemInfo"></param>
	    /// <param name="callback">Callback delegate for the callback.</param>
	    /// <param name="state">State with which to call the callback delegate.</param>
	    /// 
	    /// We assume that the WorkItem object is created within the thread
	    /// that meant to run the callback
	    public WorkItem(
			IWorkItemsGroup workItemsGroup,
			WorkItemInfo workItemInfo,
			WorkItemCallback callback, 
			object state)
		{
			_workItemsGroup = workItemsGroup;
			_workItemInfo = workItemInfo;

			if (_workItemInfo.UseCallerCallContext || _workItemInfo.UseCallerHttpContext)
			{
				_callerContext = CallerThreadContext.Capture(_workItemInfo.UseCallerCallContext, _workItemInfo.UseCallerHttpContext);
			}

			_callback = callback;
			_state = state;
			_workItemResult = new WorkItemResult(this);
			Initialize();
		}
コード例 #47
0
 /// <summary>
 /// Queue a work item
 /// </summary>
 /// <param name="workItemInfo">Work item information</param>
 /// <param name="callback">A callback to execute</param>
 /// <param name="state">
 /// The context object of the work item. Used for passing arguments to the work item. 
 /// </param>
 /// <returns>Returns a work item result</returns>
 public IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback, object state)
 {
     WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, workItemInfo, callback,
                                                        state);
     EnqueueToSTPNextWorkItem(workItem);
     return workItem.GetWorkItemResult();
 }
コード例 #48
0
ファイル: WorkItem.cs プロジェクト: amibar/SmartThreadPool
        /// <summary>
        /// Initialize the callback holding object.
        /// </summary>
        /// <param name="workItemsGroup">The workItemGroup of the workitem</param>
        /// <param name="workItemInfo">The WorkItemInfo of te workitem</param>
        /// <param name="callback">Callback delegate for the callback.</param>
        /// <param name="state">State with which to call the callback delegate.</param>
        /// 
        /// We assume that the WorkItem object is created within the thread
        /// that meant to run the callback
        public WorkItem(
            IWorkItemsGroup workItemsGroup,
            WorkItemInfo workItemInfo,
            WorkItemCallback callback,
            object state)
        {
            _workItemsGroup = workItemsGroup;
            _workItemInfo = workItemInfo;

            #if !(_WINDOWS_CE) && !(_SILVERLIGHT) && !(WINDOWS_PHONE)
            if (_workItemInfo.UseCallerCallContext || _workItemInfo.UseCallerHttpContext)
            {
                _callerContext = CallerThreadContext.Capture(_workItemInfo.UseCallerCallContext, _workItemInfo.UseCallerHttpContext);
            }
            #endif

            _callback = callback;
            _state = state;
            _workItemResult = new WorkItemResult(this);
            Initialize();
        }
コード例 #49
0
 private static void CallCallbackWithAssert(WorkItemCallback callback) {
     callback();
 }
コード例 #50
0
 // Methods
 public static void Post(WorkItemCallback callback)
 {
 }
コード例 #51
0
 /// <summary>
 /// Queue a work item
 /// </summary>
 /// <param name="workItemInfo">Work item information</param>
 /// <param name="callback">A callback to execute</param>
 /// <param name="state">
 /// The context object of the work item. Used for passing arguments to the work item. 
 /// </param>
 /// <returns>Returns a work item result</returns>
 public IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback, object state)
 {
     ValidateNotDisposed();
     ValidateCallback(callback);
     WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _stpStartInfo, workItemInfo, callback, state);
     Enqueue(workItem);
     return workItem.GetWorkItemResult();
 }
コード例 #52
0
 internal static extern int PostThreadPoolWorkItem(WorkItemCallback callback);
コード例 #53
0
 internal WrappedWorkItemCallback(WorkItemCallback callback) {
     _originalCallback = callback;
     _wrapperCallback = new WorkItemCallback(this.OnCallback);
 }
コード例 #54
0
    private void Init(HttpContext context, HttpApplication app) {
        _context = context;
        _app = app;
        _execCallback = new AspCompatCallback(this.OnAspCompatExecution);
        _compCallback = new WorkItemCallback(this.OnAspCompatCompletion);

        if (_sessionId == null && _context != null && _context.Session != null)
            _sessionId = _context.Session.SessionID;
    }
コード例 #55
0
        /// <summary>
        ///   Create a new work item
        /// </summary>
        /// <param name = "wigStartInfo">Work item group start information</param>
        /// <param name = "callback">A callback to execute</param>
        /// <param name = "state">
        ///   The context object of the work item. Used for passing arguments to the work item. 
        /// </param>
        /// <param name = "postExecuteWorkItemCallback">
        ///   A delegate to call after the callback completion
        /// </param>
        /// <param name = "callToPostExecute">Indicates on which cases to call to the post execute callback</param>
        /// <param name = "workItemPriority">The work item priority</param>
        /// <returns>Returns a work item</returns>
        public static WorkItem CreateWorkItem(
            IWorkItemsGroup workItemsGroup,
            WIGStartInfo wigStartInfo,
            WorkItemCallback callback,
            object state,
            PostExecuteWorkItemCallback postExecuteWorkItemCallback,
            CallToPostExecute callToPostExecute,
            WorkItemPriority workItemPriority)
        {
            ValidateCallback(callback);
            ValidateCallback(postExecuteWorkItemCallback);

            WorkItemInfo workItemInfo = new WorkItemInfo
                                            {
                                                UseCallerCallContext = wigStartInfo.UseCallerCallContext,
                                                UseCallerHttpContext = wigStartInfo.UseCallerHttpContext,
                                                PostExecuteWorkItemCallback = postExecuteWorkItemCallback,
                                                CallToPostExecute = callToPostExecute,
                                                WorkItemPriority = workItemPriority,
                                                DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects
                                            };

            WorkItem workItem = new WorkItem(
                workItemsGroup,
                workItemInfo,
                callback,
                state);

            return workItem;
        }
コード例 #56
0
 /// <summary>
 /// Queue a work item
 /// </summary>
 /// <param name="callback">A callback to execute</param>
 /// <param name="state">
 /// The context object of the work item. Used for passing arguments to the work item. 
 /// </param>
 /// <param name="postExecuteWorkItemCallback">
 /// A delegate to call after the callback completion
 /// </param>
 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
 /// <param name="workItemPriority">The work item priority</param>
 /// <returns>Returns a work item result</returns>
 public IWorkItemResult QueueWorkItem(
     WorkItemCallback callback,
     object state,
     PostExecuteWorkItemCallback postExecuteWorkItemCallback,
     CallToPostExecute callToPostExecute,
     WorkItemPriority workItemPriority)
 {
     WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, callback, state,
                                                        postExecuteWorkItemCallback, callToPostExecute,
                                                        workItemPriority);
     EnqueueToSTPNextWorkItem(workItem);
     return workItem.GetWorkItemResult();
 }
コード例 #57
0
        protected void CoreProcessRequest() {
            try {
                bool transacted = protocol.MethodAttribute.TransactionEnabled;
                if (protocol.IsOneWay) {
                    WorkItemCallback callback = null;
                    TraceMethod callbackMethod = null;
                    if (protocol.OnewayInitException != null) {
                        callback = new WorkItemCallback(this.ThrowInitException);
                        callbackMethod = Tracing.On ? new TraceMethod(this, "ThrowInitException") : null;
                    }
                    else {
                        parameters = protocol.ReadParameters();
                        callback = transacted ? new WorkItemCallback(this.OneWayInvokeTransacted) : new WorkItemCallback(this.OneWayInvoke);
                        callbackMethod = Tracing.On ? transacted ? new TraceMethod(this, "OneWayInvokeTransacted") : new TraceMethod(this, "OneWayInvoke") : null;
                    }

                    if (Tracing.On) Tracing.Information(Res.TracePostWorkItemIn, callbackMethod);
                    WorkItem.Post(callback);
                    if (Tracing.On) Tracing.Information(Res.TracePostWorkItemOut, callbackMethod);

                    protocol.WriteOneWayResponse();
                }
                else if (transacted) {
                    parameters = protocol.ReadParameters();
                    InvokeTransacted();
                }
                else {
                    parameters = protocol.ReadParameters();
                    Invoke();
                }
            }
            catch (Exception e) {
                if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) {
                    throw;
                }
                if (Tracing.On) Tracing.ExceptionCatch(TraceEventType.Error, this, "CoreProcessRequest", e);
                if (!protocol.IsOneWay)
                    WriteException(e);
            }

            TraceFlush();
        }
 private void Init(HttpContext context, HttpApplication app)
 {
     this._context = context;
     this._app = app;
     this._execCallback = new AspCompatCallback(this.OnAspCompatExecution);
     this._compCallback = new WorkItemCallback(this.OnAspCompatCompletion);
     if (((this._sessionId == null) && (this._context != null)) && (this._context.Session != null))
     {
         this._sessionId = this._context.Session.SessionID;
     }
 }
コード例 #59
0
ファイル: Form1.cs プロジェクト: laoqiuChina/SmartThreadPool
		private void WorkItemsProducer()
		{
			WorkItemCallback workItemCallback = new WorkItemCallback(this.DoWork);
			while(running)
			{
				IWorkItemsGroup workItemsGroup = _workItemsGroup;
				if (null == workItemsGroup)
				{
					return;
				}

				try
				{
					workItemCallback = new WorkItemCallback(this.DoWork);
					workItemsGroup.QueueWorkItem(workItemCallback);
				}
				catch(ObjectDisposedException e)
				{
                    e.GetHashCode();
					break;
				}
				workItemsGenerated++;
				Thread.Sleep(Convert.ToInt32(spinInterval.Value));
			}
		}
コード例 #60
0
 /// <summary>
 /// Queue a work item
 /// </summary>
 /// <param name="callback">A callback to execute</param>
 /// <param name="state">
 /// The context object of the work item. Used for passing arguments to the work item. 
 /// </param>
 /// <param name="postExecuteWorkItemCallback">
 /// A delegate to call after the callback completion
 /// </param>
 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
 /// <param name="workItemPriority">The work item priority</param>
 /// <returns>Returns a work item result</returns>
 public IWorkItemResult QueueWorkItem(
     WorkItemCallback callback, 
     object state,
     PostExecuteWorkItemCallback postExecuteWorkItemCallback,
     CallToPostExecute callToPostExecute,
     WorkItemPriority workItemPriority)
 {
     ValidateNotDisposed();
     ValidateCallback(callback);
     WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _stpStartInfo, callback, state, postExecuteWorkItemCallback, callToPostExecute, workItemPriority);
     Enqueue(workItem);
     return workItem.GetWorkItemResult();
 }