public IAsyncResult BeginExecute(AsyncProcessor.WorkItem workItem, TimeSpan timeout, AsyncCallback callback, object state) { return(this.BeginExecute <NoResults>((TimeSpan param0) => { workItem(timeout); return new NoResults(); }, timeout, callback, state)); }
public IAsyncResult BeginExecute <T>(AsyncProcessor.WorkItem <T> workItem, TimeSpan timeout, AsyncCallback callback, object state) { AsyncIteratorContext <T> asyncIteratorContext = new AsyncIteratorContext <T>("AsyncProcessor.Execute", callback, state); asyncIteratorContext.Begin(this.ExecuteImpl <T>(workItem, timeout, asyncIteratorContext)); return(asyncIteratorContext); }
private IEnumerator <IAsyncResult> ExecuteImpl <T>(AsyncProcessor.WorkItem <T> workItem, TimeSpan timeout, AsyncIteratorContext <T> context) { object obj = null; object obj1 = null; Duration startingNow = Duration.StartingNow; if (timeout == TimeSpan.Zero) { throw new TimeoutException("Timed out in AsyncSemaphore"); } if (timeout < TimeSpan.Zero) { throw new ArgumentOutOfRangeException("timeout", (object)timeout, "Must be >= 0"); } bool flag = false; try { object obj2 = this.syncObj; object obj3 = obj2; obj = obj2; Monitor.Enter(obj3, ref flag); if (this.state != AsyncProcessor.State.Running) { throw new InvalidOperationException("AsyncProcessor must be running first"); } } finally { if (flag) { Monitor.Exit(obj); } } IAsyncResult asyncResult = this.asyncSemaphore.BeginAcquire(timeout, context.GetResumeCallback(), context.GetResumeState("AsyncProcessor.ExecuteImpl")); yield return(asyncResult); this.asyncSemaphore.EndAcquire(asyncResult); using (AsyncSignal <T> asyncSignal = new AsyncSignal <T>()) { asyncResult = asyncSignal.BeginWait(startingNow.Remaining(timeout), context.GetResumeCallback(), context.GetResumeState("AsyncProcessor.ExecuteImpl")); Guid activityId = AsyncHelper.Trace.ActivityId; bool flag1 = false; try { object obj4 = this.syncObj; object obj5 = obj4; obj1 = obj4; Monitor.Enter(obj5, ref flag1); Queue <AsyncProcessor.WorkItemJob> workItemJobs = this.workItemQueue; workItemJobs.Enqueue(new AsyncProcessor.WorkItemJob(() => { Exception exception = null; T cSu0024u003cu003e8_localsa = default(T); try { AsyncHelper.Trace.ActivityId = activityId; cSu0024u003cu003e8_localsa = workItem(startingNow.Remaining(timeout)); } catch (Exception exception1) { exception = exception1; } if (exception != null) { asyncSignal.Abort(exception); } else { asyncSignal.Set(cSu0024u003cu003e8_localsa); } this.asyncSemaphore.Release(1); })); } finally { if (flag1) { Monitor.Exit(obj1); } } this.semaphore.Release(); yield return(asyncResult); context.ResultData = asyncSignal.EndWait(asyncResult); } }