Joh*_*ers 0 c# lambda asynchronous webclient async-await
鉴于:
public async Task<string> SendRequest(this string url)
{
var wc = new WebClient();
wc.DownloadDataCompleted += (s, e) =>
{
var buffer = e.Result;
using (var sr = new StreamReader(new MemoryStream(buffer)))
{
var result = await sr.ReadToEndAsync();
};
};
wc.DownloadDataAsync(new Uri(url));
}
}
Run Code Online (Sandbox Code Playgroud)
该声明:
var result = await sr.ReadToEndAsync();
Run Code Online (Sandbox Code Playgroud)
在设计器中显示错误,如下所示:"await运算符只能在异步lambda表达式中使用"

我不明白为什么会发生这样的消息,当我查看所有ReadToEndAsync示例时,它们看起来与此代码完全相同.
请指教...
当使用带有TPL的WebClient时,您应该使用Task名称中的方法来获取Task返回的方法,而不是使用基于事件的模式(然后您需要将其转换为任务):
public static async Task<string> SendRequest(this string url)
{
using (var wc = new WebClient())
{
var bytes = await wc.DownloadDataTaskAsync(url);
using (var reader = new StreamReader(new MemoryStream(bytes)))
return await reader.ReadToEndAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1809 次 |
| 最近记录: |