【发布时间】:2015-05-04 16:01:07
【问题描述】:
我是 C# 中使用异步方法的新手。我读过这些关键字async 和await 有助于通过异步一些方法使程序更具响应性。我有这个sn-p:
第一道
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";
});
}
我需要知道:
这两种实现有区别吗(在并行概念上)?
如果我可以创建一个任务并等待它完成,那么使用
async和await关键字有什么好处?
【问题讨论】:
-
异步和并行是两个不同的东西,尽管您可以通过异步(以及其他方式)实现并行(在某些情况下),但它们是不同的概念,不应混淆。
-
你应该花一些时间阅读一些关于这些概念的教程/资源,因为它们是非常复杂的主题,有很多错综复杂的东西;解释有关它们的所有内容很好超出了 SO 问题的范围,更不用说评论了。整本书都是关于这个主题的。
-
@ErikFunkenbusch 异步代码严格地与可伸缩性无关。这只是一方面。
-
平行性是当您雇用两名厨师时,一名煮鸡蛋,一名烤面包。异步是当一个厨师检查鸡蛋,然后检查吐司,然后上鸡蛋,然后上吐司。异步可以是并行的,但不需要并行。
-
为了更清楚地定义差异,无需类比厨师:并行性是指同时完成两项工作。异步是指你必须等待某事,而你决定在等待时做其他工作。并行是实现异步的一种技术,但它不是唯一的。在您的示例代码中,您通过说“我希望同步等待此异步操作”来击败异步的好处;这就是
Wait调用的含义。
标签: c# .net multithreading asynchronous task