2014-09-23 78 views
6

實體框架具有相同的IO綁定方法的同步和異步版本,例如SaveChangesSaveChangesAsync。我如何創建新的方法來最小化完成同樣的任務而不需要「複製」代碼?如何輕鬆支持重複的異步/同步方法?

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 2014-09-23 14:32:07

+1

@Shoe EF完全可以通過複製代碼來完成此操作;我不一定*認爲*它;然而,由於它很可能是代碼生成和元編程的混合,所以它可能是好的(即「完成正確」)。 – 2014-09-23 14:33:15

+0

如果我有cpu綁定方法而不是io-bound,那麼完成此操作的正確方法是使用'Task.Run()'之類的東西嗎? – Shoe 2014-09-23 14:46:15