如何运行异步使用“异步任务”关键字的方法

本文关键字:异步 异步任务 任务 关键字 方法 何运行 运行 | 更新日期: 2023-09-27 17:53:49

我想我可以在调用它后异步运行使用"异步任务"方法的方法,但它被阻止了,实际上它是同步运行的,请参阅我的代码如下所示。

    static void Main(string[] args)
    {
        asyncTest();// use asyncTest.Wait() help nothing. 
        Console.ReadKey();
    }
    static async Task asyncTest() 
    {
        Console.WriteLine("before init task second " + DateTime.Now.Second);
        var t1 = getInt1S();// I supposed it to run background,but it blocked
        var t3 = getInt3S();
        //var await1 = await t1;//this line just no use, run quickly
        //var await3 = await t3;//this line just no use, run quickly
        Console.WriteLine("after init task second " + DateTime.Now.Second);
    }
    static async Task<int> getInt1S() 
    {
        Console.WriteLine("getInt1S" + DateTime.Now.Second);
        Task.Delay(1000).Wait();
        return 1;
    }
    static async Task<int> getInt3S() 
    {
        Console.WriteLine("getInt3S" + DateTime.Now.Second);
        Thread.Sleep(3000);
        return 3;
    }

输出如下:

before init task second 21
getInt1S 21
getInt3S 22
after init task second 25

为什么'getInt1S(('和'await getInt3S(('都同步运行?有没有办法像这样编码:

var a = methodSync();//method define like: async Task<T> methodSync()
Console.Write("");//do something during processing the methodSync
T b = await a;

我不会了解如何在 ConsoleApp 中使用"async methodSync((",只是如何让我的"t1"和"t2"在"asyncTest(("中异步运行。

我正在研究异步/等待,所以我想找到一些不同于 ' var a = new Task(((=>{return 1;}('

调用 asyncTest(( 的方式重要吗?还是我错过了什么?

有谁可以帮助我?或者指出我的错误。

谢谢。

如何运行异步使用“异步任务”关键字的方法

所有异步方法都同步运行,直到第一条await指令。

然后,如果可等待的(await等待的内容(完成,它将继续同步运行,直到下一条await指令或方法结束。

一旦达到未完成的可等待,控件将返回到调用方法,返回一个Task,当异步方法中的所有 awaitable 完成并到达方法的末尾时,该将完成。

此编译器功能的目的是轻松生成按顺序(非同步(运行的代码,从而生成您所看到的内容。