/// <summary> /// Executes the callback passed as state and signals its completion when it has finished executing. /// </summary> /// <param name="state"></param> private void HandleWorkItem(object state) { QueuedCallback qc = (QueuedCallback)state; try { qc.Callback(qc.State); } finally { DoneWorkItem(); } }
/// <summary>Queues a user work item to the ThreadPool.</summary> /// <param name="callback">The work item to be queued.</param> /// <param name="state">State to be passed to the queued work item</param> public void QueueUserWorkItem(WaitCallback callback, object state) { ThrowIfDisposed(); QueuedCallback qc = new QueuedCallback(); qc.Callback = callback; qc.State = state; Interlocked.Increment(ref _remainingWorkItems); ThreadPool.QueueUserWorkItem(new WaitCallback(HandleWorkItem), qc); }
/// <summary> /// Queues a user work item to the ThreadPool. /// </summary> /// <param name="callback">The work item to be queued.</param> /// <param name="state">State to be passed to the queued work item</param> public void QueueUserWorkItem(WaitCallback callback, object state) { ThrowIfDisposed(); QueuedCallback qc = new QueuedCallback(); qc.Callback = callback; qc.State = state; Interlocked.Increment(ref _remainingWorkItems); ThreadPool.QueueUserWorkItem(new WaitCallback(HandleWorkItem), qc); }
/// <summary>Queues a user work item to the ThreadPool.</summary> /// <param name="callback">The work item to be queued.</param> /// <param name="state">State to be passed to the queued work item</param> public void QueueUserWorkItem(WaitCallback callback, object state) { ThrowIfDisposed(); QueuedCallback qc = new QueuedCallback(); qc.Callback = callback; qc.State = state; lock (_done) _remainingWorkItems++; ThreadPool.QueueUserWorkItem(new WaitCallback(HandleWorkItem), qc); }
public void QueueWorkItem(Action act, object state) { ThrowIfDisposed(); QueuedCallback qc = new QueuedCallback(); qc.Callback = (x => act()); qc.State = state; lock (_done) _remainingWorkItems++; ThreadPool.QueueUserWorkItem(new WaitCallback(HandleWorkItem), qc); }