我正在学习如何使用Async和Await c#。所以我得到一个链接http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx#BKMK_WhatHappensUnderstandinganAsyncMethod
从这里我尝试从VS2012 IDE运行代码但是收到错误。 此功能引发错误。
private void button1_Click(object sender, EventArgs e)
{
int contentLength = await AccessTheWebAsync();
label1.Text= String.Format("\r\nLength of the downloaded string: {0}.\r\n", contentLength);
}
此行给出错误await AccessTheWebAsync();
'await'运算符只能在异步方法中使用。请考虑使用“async”修饰符标记此方法,并将其返回类型更改为“Task”
我做错了什么。请指导我如何运行代码。感谢
答案 0 :(得分:5)
它非常清楚地表明您必须使用async
修饰您的方法。像这样:
// note the 'async'!
private async void button1_Click(object sender, EventArgs e)
看看这里:async (C# Reference)。
通过使用async修饰符,可以指定方法,lambda表达式或匿名方法是异步的。如果在方法或表达式上使用此修饰符,则将其称为异步方法。
答案 1 :(得分:1)
你需要在你的方法中放入异步,我修改了你的代码,因为Click事件签名没有返回int,而你的方法AccessTheWebAsync
也是如此,所以我将它移动到另一个返回int的async方法,无论如何我async和await是一种语法糖,建议您在使用这些关键字时查看代码的真实情况,请查看此处:http://www.codeproject.com/Articles/535635/Async-Await-and-the-Generated-StateMachine
private async void button1_Click(object sender, EventArgs e)
{
await ClickAsync();
}
private async Task<int> AccessTheWebAsync()
{
return await Task.Run(() =>
{
Task.Delay(10000); //Some heavy work here
return 3; //replace with real result
});
}
public async Task ClickAsync()
{
int contentLength = await AccessTheWebAsync();
label1.Text = String.Format("\r\nLength of the downloaded string: {0}.\r\n", contentLength);
}
}