コード例 #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 AllowAsyncOperationsBlockDisposable(AspNetSynchronizationContextBase syncContext)
 {
     _syncContext = syncContext;
 }