-1

我正在学习如何使用 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(); “等待”运算符只能在异步方法中使用。考虑使用“异步”修饰符标记此方法并将其返回类型更改为“任务”

我做错了什么。请指导我如何运行代码。谢谢

4

2 回答 2

5

它非常清楚地表明你必须用async. 像这样:

// note the 'async'!
private async void button1_Click(object sender, EventArgs e)

看看这里:async (C# Reference)

通过使用 async 修饰符,您可以指定方法、lambda 表达式或匿名方法是异步的。如果在方法或表达式上使用此修饰符,它被称为异步方法。

于 2013-11-14T08:07:18.517 回答
1

您需要将 async 放入您的方法中,我修改了您的代码,因为 Click 事件签名不返回 int,而您的方法AccessTheWebAsync确实如此,所以我将其移至另一个返回 int 的方法 async,无论如何我 async 和 await 是一种语法糖并建议您查看使用这些关键字时代码实际发生的情况,请查看此处: http: //www.codeproject.com/Articles/535635/Async-Await-and-the-Generated-状态机

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);
        }
    }
于 2013-11-14T08:24:15.710 回答