2014-12-02 119 views
-3

我要打電話的TextReader異步讀取方法「中的‘等待’操作只能異步方法中使用」,但總是得到一個編譯錯誤:嘗試使用異步方法TextReader.ReadBlockAsync,但得到

var buffer = new char[10]; 

TextReader reader = new StreamReader(@"D:\temp\abc.txt"); 

// the following statement will get compile error 
var readCount = await reader.ReadBlockAsync(buffer, 0, buffer.Length); 

這是錯誤:

The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task'.

什麼是使用ReadBlockAsync正確的方式?

+0

你能告訴我們的代碼是,太方法的簽名? – 2014-12-02 01:55:37

+5

您是否考慮使用'async'修飾符標記此方法並將其返回類型更改爲'Task'。 – 2014-12-02 01:58:27

+1

認真。我的意思是,很難想到錯誤信息會變得多清晰,不僅僅是在錯誤方面,而且在於如何解決它!如果您需要更多的幫助而不是錯誤信息已經給您的幫助,您需要詳細解釋。請參閱http://stackoverflow.com/help/how-to-ask – 2014-12-02 02:03:49

回答

0

您只需如其他人所說與async標識符標記的方法。然後,該方法需要返回一個TaskTask<T>void。但void返回的異步方法是爲異步事件處理程序保留的。所以你的情況,你很可能要返回Task<string>

public async Task<string> ReadAsync() 
{ 
    var buffer = new char[10]; 

    TextReader reader = new StreamReader(@"D:\temp\abc.txt"); 

    var readCount = await reader.ReadBlockAsync(buffer, 0, buffer.Length); 

    return new string(buffer.Take(readCount).ToArray()); 
} 

您可能會發現有用以下資源:Best practices with Async/AwaitAsynchronous Programming with Async-Await

+0

你已經在行中「下面的語句將得到編譯錯誤」 – stuartd 2014-12-02 02:21:19

+0

謝謝,更新。 – 2014-12-02 03:08:04