尝试使用异步方法TextReader.ReadBlockAsync,但得到"等待'等待'运算符只能在异步方法中使用"

时间:2014-12-02 01:51:07

标签: c# .net asynchronous async-await

我想调用TextReader的异步读取器方法,但总是遇到编译错误:

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

这是错误:

  

'await'运算符只能在异步方法中使用。     考虑使用'async'修饰符标记此方法并将其返回类型更改为'Task'。

使用ReadBlockAsync的正确方法是什么?

1 个答案:

答案 0 :(得分: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