コード例 #1
0
        public async Task ExecuteTasksAsync(object sender, EventArgs e, CancellationToken cancellationToken, AspNetSynchronizationContextBase syncContext, IRequestCompletedNotifier requestCompletedNotifier)
        {
            try {
                while (_registeredTasks.Count > 0)
                {
                    // if canceled, propagate exception to caller and stop executing tasks
                    cancellationToken.ThrowIfCancellationRequested();

                    // if request finished, stop executing tasks
                    if (requestCompletedNotifier.IsRequestCompleted)
                    {
                        return;
                    }

                    // execute this task
                    IPageAsyncTask task = _registeredTasks.Dequeue();
                    using (syncContext.AllowVoidAsyncOperationsBlock()) {
                        await task.ExecuteAsync(sender, e, cancellationToken);
                    }
                }
            }
            finally {
                _executeTasksAsyncHasCompleted = true;
            }
        }
コード例 #2
0
        public void EnqueueTask(IPageAsyncTask task) {
            if (_executeTasksAsyncHasCompleted) {
                // don't allow multiple calls to the execution routine
                throw new InvalidOperationException(SR.GetString(SR.PageAsyncManager_CannotEnqueue));
            }

            _registeredTasks.Enqueue(task);
        }
コード例 #3
0
        public void EnqueueTask(IPageAsyncTask task)
        {
            if (_executeTasksAsyncHasCompleted)
            {
                // don't allow multiple calls to the execution routine
                throw new InvalidOperationException(SR.GetString(SR.PageAsyncManager_CannotEnqueue));
            }

            _registeredTasks.Enqueue(task);
        }