2014-09-23 8 views
6

Entity Framework hat synchrone und asynchrone Versionen der gleichen IO-gebundenen Methoden wie SaveChanges und SaveChangesAsync. Wie kann ich neue Methoden erstellen, die die gleiche Aufgabe minimal erfüllen, ohne Code zu "duplizieren"?Wie kann ich doppelte Async-/Sync-Methoden problemlos unterstützen?

public bool SaveChanges() 
{ 
    //Common code calling synchronous methods 
    context.Find(...); 

    //Synchronous Save 
    return context.SaveChanges(); 
} 

public async Task<bool> SaveChangesAsync() 
{ 
    //Common code asynchronous methods 
    await context.FindAsync(...);  

    //Asynchronous Save 
    return await context.SaveChangesAsync(); 
} 

Antwort

5

Sie können nicht - zumindest nicht vernünftig. Synchrone und asynchrone Implementierungen sind grundlegend anders. Sie können über fabulieren, über "sync über async" und "async über sync", aber beide sind Anti-Muster und sollten vermieden werden.

+0

Kann man davon ausgehen, dass EF dies durch Duplizieren des Codes erreicht? – Shoe

+1

@Schuh es ist * völlig möglich *, dass EF dies durch Duplizieren des Codes erreicht; Ich würde es nicht unbedingt annehmen. Da es sich jedoch höchstwahrscheinlich um eine Mischung aus Code-Gen und Meta-Programmierung handelt, ist es wahrscheinlich in Ordnung (d. h. "richtig gemacht"). –

+0

Wenn ich cpu-gebundene Methoden anstelle von io-gebunden hätte, wäre der richtige Weg, dies zu erreichen, etwas wie 'Task.Run()' zu verwenden? – Shoe

Verwandte Themen