2012-06-12 53 views
3

這似乎不是與其他數百個具有相同錯誤的其他問題的重複。我已經看過他們,發現他們是不相關的。修飾符異步對此項無效

我正在做一個小記錄應用程序,並試圖從目錄中讀取文件。繼MSDN的例子,我有以下的代碼,但它給我的錯誤:


錯誤1修飾語「異步」是不適用於此 項目C:\用戶\ Jase \的文檔\ Visual Studio的 2012 \項目\ AppNameHere \ AppNameHere \ DataModel的\ AppNameHereDataSource.cs 192 9 AppNameHere


我的代碼是:

async public NotesDataSource() 
    { 
     StorageFolder documentsFolder = KnownFolders.DocumentsLibrary; 
     StringBuilder outputText = new StringBuilder(); 

     IReadOnlyList<StorageFile> fileList = 
      await documentsFolder.GetFilesAsync(); 
     outputText.AppendLine("Files:"); 

     foreach (StorageFile file in fileList) 
     { 
      if (file.FileType == "txt") 
      { 
       outputText.Append(file.Name + "\n"); 
      } 
     } 
     // lots of irrelevant code removed. 
    } 


我不明白這裏發生了什麼。我將所有內容都追蹤到了「T」。有人可以幫忙嗎?

謝謝!

+0

什麼.NET框架是你努力的目標。如果安裝了.NET Framework的擴展和/或如果您嘗試定位.NET Framework 4.5,則'async'只是一個關鍵字。請提供MSDN示例的鏈接。 –

+0

它適用於Windows 8發佈預覽版的Metro應用程序:http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh758323.aspx - 並且此錯誤不是因爲Windows 8尚未完成(正如我多次被告知的那樣) - 因爲許多其他應用程序正在讀取和寫入Metro應用程序中的文件。 – Arrow

+3

可以重複的[可以構造函數是異步](http://stackoverflow.com/questions/8145479/can-constructors-be-async) –

回答

12

你的方法簽名不正確。看它:

async public NotesDataSource() 

首先,async有訪問修飾符IIRC後前來。其次,要麼嘗試創建一個異步構造函數(你不能這樣做),要麼你正在嘗試編寫一個沒有返回類型(同樣無效)的方法。

試試這個:

public async Task NotesDataSource() 

也就是說,如果你的意思是它是一個方法的。如果你想有效創建一個異步的構造函數(或接近它),你必須使用一個異步靜態方法:

public static async Task<NotesDataSource> CreateInstance() 
{ 
    // Do async stuff here which fetches all the necessary data... 

    return new NotesDataSource(...); 
} 
+0

訪問修飾符後我無法使用異步。編譯器發出一陣嘶嘶聲,告訴我不要這樣做。所以我試着把它放在修飾符之前,並且它能夠工作(反正比它更好) – Arrow

+1

@Jason:那麼你仍然有一個編譯錯誤,所以它不是真的工作......你應該*有'異步'訪問修飾符後面,所以我認爲你只是在轉移問題。 –

+0

@JonSkeet:出於好奇,(如果你不介意),我想知道:你如何設法每天發表如此多的答案(和評論)?你平均花了多少時間在SO上? – Nawaz

1

我認爲你需要的地方asyncpublic

public async NotesDataSource() 
{ 
    //your code here 
} 
+0

這就是我的想法。由於某種原因,編譯器不會那樣。 – Arrow

+1

@Jason那是因爲此外,您還需要實現Jon Skeet關於構造函數和靜態方法的建議中的一個或另一個。 – Widor

+0

謝謝你Widor – Arrow