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; } }
public AllowAsyncOperationsBlockDisposable(AspNetSynchronizationContextBase syncContext) { _syncContext = syncContext; }