首页 > 解决方案 > 异步 C#

问题描述

我对这两个关键字(Async 和 Await)都有疑问,他们的主要目标是按照我的理解同时完成多个方法,例如,如果我要执行一项长时间的任务,这将阻止在这种情况下,我必须使用(异步和等待)执行的主要任务。

但是当我在两个执行相同操作的不同程序中尝试它时,我发现执行与使用(异步和等待)相同

第一

    class Async
{
    public Async()
    {
        main();
    }

    public async void main()
    {
        Console.WriteLine("Main Thread....");
        await SlowTask();
        Console.WriteLine("Back To Main Thread");
    }

    public async Task SlowTask()
    {
        Console.WriteLine("Useless Thread....");
        for (int i = 0; i < 1000000; i++)
        {
            // TODO
        }
        Console.WriteLine("Finished Useless Thread....");
    }
}

第二个

    class NoAsync
{
    public NoAsync()
    {
        main();
    }
    public void main()
    {
        Console.WriteLine("Main Thread....");
        SlowTask();
        Console.WriteLine("Back To Main Thread");
    }
    public void SlowTask()
    {
        Console.WriteLine("Useless Thread....");
        for (int i = 0; i < 1000000; i++)
        {
            // TODO
        }
        Console.WriteLine("Finished Useless Thread....");
    }
}

两者的执行完全相同,据我了解,当使用(异步和等待)时,main 和 SlowTask 将同时执行而无需等待一个结束,因此另一个开始执行,但这不会发生。

我做错了什么或者我误解了 C# 中的异步?亲切的问候。

标签: c#asynchronous

解决方案


执行应该完全相同,它们是逻辑一致的程序。鉴于您的整个程序只是增加一个计数器变量,因此可能甚至没有一个任务切换。


推荐阅读