2014-09-23 1 views
6

Структура сущности имеет синхронные и асинхронные версии тех же IO-связанных методов, как SaveChanges и SaveChangesAsync. Как я могу создавать новые методы, которые минимально выполняют одну и ту же задачу без «дублирования» кода?Как я могу легко поддерживать повторяющиеся методы async/sync?

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(); 
} 

ответ

5

Вы не можете - по крайней мере, неразумно. Синхронные и асинхронные реализации - принципиально разные. Вы можете подделывать над ним через «sync over async» и «async over sync», но оба они являются анти-шаблонами и их следует избегать.

+0

Можно ли предположить, что EF выполняет это путем дублирования кода? – Shoe

+1

@Shoe это * полностью возможно *, что EF выполняет это путем дублирования кода; Я не обязательно * предполагаю * это; однако, так как это, скорее всего, смесь кода-гене и мета-программирование, возможно, это хорошо (т. е. «сделано правильно»). –

+0

Если бы у меня были методы cpu-bound, а не io-bound, правильным способом для этого было бы использовать что-то вроде 'Task.Run()'? – Shoe

Смежные вопросы