2017-05-04 80 views
1

我正在關注如何在.NET核心中開發完整堆棧項目的PluralSight課程,並且遇到了無數的錯誤,因此和一些甜蜜的Google-fu有幫助我理解(主要是由於VS版本的差異)。無法解釋錯誤消息'異步對此項無效'

但是我剛剛遇到了一些更復雜的事情?

public interface IWorldRepository 
    { 
     async Task<bool> SaveChangesAsync(); // <-- error occurs here 
    } 

其中在其接口的類(WorldRepository)用這種方法:

public async Task<bool> SaveChangesAsync() 
    { 
     return (await _context.SaveChangesAsync()) > 0; 
    } 

我與.NET的經驗,這應該可以正常工作,我具有此方法的接口IWorldRepository工作,但出於某種原因,界面正在抱怨它,並說:「修飾符」async「對此項無效。」

我看了看周圍的錯誤,並發現我們親愛的 Jon Skeet的解釋。然而,我並不真正瞭解可能發生了什麼以及爲什麼我的代碼是錯誤的。

不僅它看起來不錯,但它似乎在PluralSight上運行相同的代碼的指導員工作正常。

如果有人能夠闡明這一點,我將不勝感激!

+2

您不能將接口成員定義爲'async'。刪除關鍵字,這將編譯。 –

+2

「對於運行相同代碼的教師工作正常」 - 這不可能。包含'異步任務 SaveChangesAsync();'的界面不會編譯 – Alex

+0

這就是我的想法。那麼編譯器是否理解(在運行時)該方法在默認情況下是異步的(因爲使用Task)?編寫這樣的代碼是否有任何意義(性能和味道)? – geostocker

回答

2

在接口定義中不能使用async關鍵字。但是,它正確放置在繼承類定義中。

這是因爲接口定義的結構(的東西)和類定義了實現(該怎麼做)。將方法標記爲async允許在方法體中使用await關鍵字,但不構成方法簽名的一部分。

從您的界面中刪除async關鍵字將允許您的代碼進行編譯。

public interface IWorldRepository 
{ 
    Task<bool> SaveChangesAsync(); 
} 
0

我有同樣的問題,但我回去看了視頻,發現紅色的波浪線從未離開指導員的界面聲明。我想,他只是沒有回去修復視頻。