Entity Framework 6.1.0 SaveChangesAsync

У меня есть вспомогательный класс EF, который сохраняет изменения асинхронно:

public async Task<int> SaveOrUpdateAsync<TEntity>(TEntity entity)
        where TEntity : class, IContextEntity
    {
        if (entity.Id == 0)
            context.Set<TEntity>().Add(entity);
        else
        {
            TEntity dbEntry = context.Set<TEntity>().Find(entity.Id);
            if (dbEntry != null) dbEntry = entity;
        }

        return await context.SaveChangesAsync();
    }

public void Save()
{
Task saveEntit1Async = repository.SaveOrUpdateAsync<Entity1>(entity1);
Task saveEntity2Async = repository.SaveOrUpdateAsync<Entity2>(entity2);
Task saveEntity3Async =  repository.SaveOrUpdateAsync<Entity3>(Entity3);

Task.WaitAll(saveEntit1Async, saveEntity2Async, saveEntity3Async);

string test = "test";
)

Звонок застревает на

Task.WaitAll(saveEntit1Async, saveEntity2Async, saveEntity3Async);

линия и никогда не добирается до

 string test = "test";

Но если я запускаю это как:

public void Save()
{
repository.SaveOrUpdateAsync<Entity1>(entity1);
repository.SaveOrUpdateAsync<Entity2>(entity2);
repository.SaveOrUpdateAsync<Entity3>(Entity3);

string test = "test";
)

Работает нормально, все изменения сохраняются и доходит до

string test = "test";

Почему

Task.WaitAll(saveEntit1Async, saveEntity2Async, saveEntity3Async);

Замораживает операцию и никогда не передает вызов следующей строке кода (string test = "test";)?

Ответы на вопрос(2)

Ваш ответ на вопрос