Executing multiple async methods synchronously without throwing
After my initial answer and based on your subsequent comments, I would say that your implementation is OK.

As for naming I would keep it simple like WhenAllCompleted

/// &lt;summary&gt;
/// Creates a task that will complete when all of the supplied tasks have completed synchronously.
/// &lt;/summary&gt;
/// &lt;param name="tasks"&gt;The tasks to wait on for completion.&lt;/param&gt;
/// &lt;returns&gt;A task that represents the completion of all of the supplied tasks.&lt;/returns&gt;
public static async Task WhenAllCompleted(this IEnumerable&lt;Func&lt;Task&gt;&gt; tasks) {
    if (tasks == null) throw new ArgumentNullException("tasks");
    var exceptions = new List&lt;Exception&gt;();
    using (var e = tasks.GetEnumerator()) {
        while (e.MoveNext()) {
            var task = e.Current;
            try {
                await task();
            } catch (Exception ex) {
                exceptions.Add(ex);
            }
        }
    }
    if (exceptions.Any()) {
        throw new AggregateException(exceptions);
    }
}


I've basically only added the null check on the provided argument. I considered doing null checks on the function and task returned like

var function = e.Current;
if (function == null) {
    exceptions.Add(new ArgumentException("The tasks collection contained a null task.", "tasks"));
    continue;
}
//...


but figured that would all be caught by your simpler implementation, so decided against it.

Though you have not added cancellation as yet the following should be of some help with an optional cancellation token

/// &lt;summary&gt;
/// Creates a task that will complete when all of the supplied tasks have completed synchronously.
/// &lt;/summary&gt;
/// &lt;param name="tasks"&gt;The tasks to wait on for completion.&lt;/param&gt;
/// &lt;returns&gt;A task that represents the completion of all of the supplied tasks.&lt;/returns&gt;
public static async Task WhenAllCompleted(this IEnumerable&lt;Func&lt;Task&gt;&gt; tasks, CancellationToken token = default(CancellationToken)) {
    if (tasks == null) throw new ArgumentNullException("tasks");
    var exceptions = new List&lt;Exception&gt;();
    using (var e = tasks.GetEnumerator()) {
        while (e.MoveNext()) {
            if (token.IsCancellationRequested) {
                exceptions.Add(new OperationCanceledException("tasks collection was cancelled", token));
                break;
            }
            try {
                await e.Current();
            } catch (Exception ex) {
                exceptions.Add(ex);
            }
        }
    }
    if (exceptions.Any()) {
        throw new AggregateException(exceptions);
    }
}