gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:42:39 25 4
gpt4 key购买 nike

我不熟悉在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com