繁体   English   中英

异步/等待:使方法异步

[英]Async/await: Making method async

我试图做一个简单的例子,但我什至没有基础。 此代码有什么问题? 想象一下Calculate()需要几秒钟。

    static void Main(string[] args)
    {
        int result = await Calculate();

        Console.WriteLine(result);
        Console.ReadLine();
    }

    static async Task<int> Calculate()
    {
        return 1;
    }

只需将您的main更改为:

static void Main(string[] args)
{
    int result = Calculate().Result;

    Console.WriteLine(result);
    Console.ReadLine();
}

一旦使用await关键字,就必须将周围的方法标记为async ,因为其他方法无法使用Main 由于诸如Calculate类的async方法仍会返回良好的旧Task对象,因此可以随意使用“旧”方法来处理它们:使用Result等待结果。 当然这是一个阻塞操作-但是没有理由在Main内部不阻塞,对吗? ;)

你可以这样做:

static void Main()
{
    WrapMain();
}

static async void WrapMain()
{
    int result = await Calculate();

    Console.WriteLine(result);
    Console.ReadLine();
}

static async Task<int> Calculate()
{
    return await Task.Run(() =>
    {
        return 1;
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM