Entity Framework 6.1.0 SaveChangesAsync

Ich habe eine EF-Helferklasse, die Änderungen asynchron speichert:

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

Der Anruf bleibt hängen

Task.WaitAll(saveEntit1Async, saveEntity2Async, saveEntity3Async);

Linie und bekommt nie zu

 string test = "test";

Aber wenn ich es so laufen lasse:

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

string test = "test";
)

Es funktioniert gut, alle Änderungen werden gespeichert und es kommt zu

string test = "test";

Warum ist

Task.WaitAll(saveEntit1Async, saveEntity2Async, saveEntity3Async);

Friert den Vorgang ein und leitet den Aufruf niemals an die nächste Codezeile weiter (string test = "test";)?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage