Entity Framework 6.1.0 SaveChangesAsync

Eu tenho a classe auxiliar EF que salva as alterações assíncronas:

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";
)

A chamada fica presa

Task.WaitAll(saveEntit1Async, saveEntity2Async, saveEntity3Async);

linha e nunca chega a

 string test = "test";

Mas se eu executá-lo como:

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

string test = "test";
)

Funciona bem, todas as alterações estão sendo salvas e chega a

string test = "test";

Porque é

Task.WaitAll(saveEntit1Async, saveEntity2Async, saveEntity3Async);

Congela a operação e nunca passa a chamada para a próxima linha de código (string test = "test";)?

questionAnswers(2)

yourAnswerToTheQuestion