Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步和等待特性的误导_C#_Asp.net_Asp.net Mvc_C# 5.0_Asp.net 4.5 - Fatal编程技术网

C# 异步和等待特性的误导

C# 异步和等待特性的误导,c#,asp.net,asp.net-mvc,c#-5.0,asp.net-4.5,C#,Asp.net,Asp.net Mvc,C# 5.0,Asp.net 4.5,C#是一种同步语言,即进程将阻塞UI,直到结果出现,现在麻烦就来了;这个带有wait的异步与同步看起来是一样的 异步+等待=同步 我知道调用者继续前进,即主线程被释放。通过使用异步编程,您可以避免性能瓶颈并增强应用程序的整体响应能力 然而,编写异步应用程序的传统技术可能很复杂,使它们难以编写、调试和维护 Visual Studio 2012引入了一种简化的方法,即异步编程,它利用了.NET Framework 4.5和Windows运行时中的异步支持 编译器完成了开发人员过去所做的困难工作,而您

C#是一种同步语言,即进程将阻塞UI,直到结果出现,现在麻烦就来了;这个带有wait的异步与同步看起来是一样的

异步+等待=同步


我知道调用者继续前进,即主线程被释放。

通过使用异步编程,您可以避免性能瓶颈并增强应用程序的整体响应能力

然而,编写异步应用程序的传统技术可能很复杂,使它们难以编写、调试和维护

Visual Studio 2012引入了一种简化的方法,即异步编程,它利用了.NET Framework 4.5和Windows运行时中的异步支持

编译器完成了开发人员过去所做的困难工作,而您的应用程序保留了类似于同步代码的逻辑结构。因此,您只需付出一小部分努力就可以获得异步编程的所有优势

MSDN文档

C#是一种同步语言,即进程将阻塞UI,直到结果出现

1) C#与UI无关。UI作为一个框架实现,语言不可知

2) 仅算桌面,至少有2个UI框架,没有“UI”

3) 您是对的,2个现成的框架具有线程亲和力,并且有一个主消息泵。(顺便说一句,没有什么可以阻止你做你想做的事情,只是你在每个控件中创建的控件必须在这个控件上被独占访问,称为“序列化”,这是一个众所周知的多道程序设计模式

现在回到标题中的主要主题

很明显,您了解异步/等待是如何工作的。您对异步的误解是什么

请注意:当您使用async/await时,它不会阻塞线程。在异步执行完成后,这是代码流中的继续。如果它将被实现为完成处理程序或回调,每个人都会看到它是什么。现在它被写为代码的下一行。我承认它可能会误导一个线程,但它更简单不必编写(内联)完成处理程序,特别是如果一行中有5个异步操作,那么必须将完成嵌套在4个级别。这是C#编译器使用async/await为您生成的,并允许您逐行编写代码

不管怎样,就像你写的那样

我确实理解调用方继续,即主线程被释放


所以它是异步的。

那么你的问题是什么?请学习异步的基础知识,等待这些不是同步的检查:你是对的,它释放了线程,但这并不意味着它与同步相同。等待的任务稍后将执行。如果它是同步的,它将停止,直到任务执行为止。不,先生,你是c如果将返回结果的方法也标记为任务,请阅读发布的所需文档,以了解async和Wait的机制和用法。