c# - 使用 async 和 await 关键字的好处

标签 c# .net multithreading asynchronous task

我不熟悉在 C# 中使用异步方法。我读到这些关键字 asyncawait 有助于通过异步化某些方法使程序响应更快。我有这个片段:

第一种方式

    public static void Main()
    {
        Console.WriteLine("Hello!! welcome to task application");
        Console.ReadKey();
        Task<string> ourtask = Task.Factory.StartNew<string>(() =>
        {
            return "Good Job";
        });
        ourtask.Wait();
        Console.WriteLine(ourtask.Result);
        Console.ReadKey();
    }

第二种方式

 public static void Main()
        {
            Launch();
        }
        public static async void Launch()
        {
            Console.WriteLine("Hello!! welcome to task application");
            Console.ReadKey();
            Console.WriteLine(await GetMessage());
            Console.ReadKey();
        }

        public static Task<string> GetMessage()
        {
            return Task.Factory.StartNew<string>(() =>
                {
                    return "Good Job";
                });
        }

我需要知道:

  1. 这两种实现有区别吗(在并行的概念上)?

  2. 如果我可以创建一个任务并等待它完成,那么使用 asyncawait 关键字有什么好处?

    <

最佳答案

假设您有一个边境检查站。每辆车都可以通过它,让海关检查他们的车,看他们是否没有走私任何比利时巧克力。

现在假设您在您的 Volkswagen Beetle 中排队,而您在一辆 24 轮巨型卡车之前几乎无法容纳。你现在被困在这个庞然大物后面很长一段时间,直到海关完成对这一切的搜索,然后他们才能转移到你身上,他们基本上只需要拍拍你,告诉你你可以走了。

为了打击这种效率,我们边境巡逻的好 friend 灵机一动,安装了第二个检查站。现在他们可以通过两倍的人,你可以只带那个人而不是在怪物卡车后面等待!

问题解决了吧?不完全是。他们忘记创建第二条通往该检查站的道路,因此所有交通仍然必须通过单车道,导致卡车仍然挡住了甲壳虫。

这与您的代码有什么关系?非常简单:您正在做同样的事情。

当您创建一个新的 Task 时,您实际上创建了第二个检查点。但是,当您现在使用 .Wait() 同步阻止它时,您是在迫使每个人走那条路。

在第二个示例中,您使用 await 创建第二条道路并允许您的汽车与卡车同时处理。

关于c# - 使用 async 和 await 关键字的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28841345/

相关文章:

c# - 从 C# 调用非托管 .dll 的性能

c# - 如何让 Nhibernate 优雅地处理不存在的数据库列

c# - 如果将其名称作为参数传递,如何在方法中打开表单

c# - 将 Nhibernate 结果转换为 IDictionary<string,int>

c# - .net framework 4.0 应用程序从 USB 驱动器运行

c# - 我如何在 C#.net 中读取 POSTED Json 数据?

c# - 如何使用 WebBrowser 控件模拟鼠标单击

C多线程程序行为解释

java - 从非 EventDispatchThread 使用 JEditorPane

java - Selenium Java 多线程 FirefoxDriver