Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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
Razor 何时在MVC 6的视图中使用@await Html.PartialAsync_Razor_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

Razor 何时在MVC 6的视图中使用@await Html.PartialAsync

Razor 何时在MVC 6的视图中使用@await Html.PartialAsync,razor,asp.net-core,asp.net-core-mvc,Razor,Asp.net Core,Asp.net Core Mvc,我在Scott Hanselman的一个博客上注意到,在使用.Net 5(MVC 6)时,他在视图中使用了以下代码: vs 关于什么时候应该使用哪一个,还有什么文档吗?这实际上是一个非常有趣的问题和场景。在某种程度上,异步是新的热点(尽管它并不是那么新)。实体框架6使用异步方法和每个。。。单身。。。块属于文档突然开始对所有内容使用异步。我想我们在这里看到了一些相同的情况。MVC6支持异步处理部分渲染之类的事情,所以OMG我们现在都必须使用异步 Async有一个非常特殊的用途。当当前任务处于等待状

我在Scott Hanselman的一个博客上注意到,在使用.Net 5(MVC 6)时,他在视图中使用了以下代码:

vs


关于什么时候应该使用哪一个,还有什么文档吗?

这实际上是一个非常有趣的问题和场景。在某种程度上,异步是新的热点(尽管它并不是那么新)。实体框架6使用异步方法和每个。。。单身。。。块属于文档突然开始对所有内容使用异步。我想我们在这里看到了一些相同的情况。MVC6支持异步处理部分渲染之类的事情,所以OMG我们现在都必须使用异步

Async有一个非常特殊的用途。当当前任务处于等待状态时,它允许活动线程返回到池中,以字段化其他任务。其关键部分是“等待状态”。某些任务与async完全不兼容。CPU受限的工作,如复杂的财务分析,永远不允许线程进入等待状态,因此即使将其设置为异步,也可以有效地以同步方式运行。另一方面,涉及网络延迟(从web API请求资源、查询数据库等)或I/O绑定(读取/写入文件等)的事情有时会出现线程等待其他进程完成后再继续处理的情况

特别是在呈现部分视图时,唯一不完全受CPU限制的部分是从文件系统读取视图文件本身。虽然这在技术上足以使其符合异步的条件,但读取本质上是一个最大可能小于50KB的文本文件需要多长时间。当线程返回到池时,可能是请求返回的时候了,因此此时您实际使用的资源效率更低

长话短说,不要落入“它可以异步完成,所以我必须异步完成”的陷阱。每次使用都应该根据是否有实际价值进行评估。Async有很多开销,如果您只说几毫秒的等待时间,那么可能不值得这么多额外的开销。

关于“wait Html.PartialAsync”-此链接可能会帮助您-(也请关注注释)(关于之前的问题)

我正在开发一个基于MVC6的面向公众的网站,“wait Html.PartialAsync”比“Html.Partial”要快,尤其是当视图包含很多组件时


从Html.PartialAsync中去掉“wait”显然不起作用,Html.PartialAsync会吐出类型名(即“System.Threading.Tasks.Task`1[Microsoft.AspNet.Mvc.Rendering.HtmlString]”),而不是实际的视图

根据ASP.NET MVC部分视图文档。

PartialAsync方法可用于包含异步代码的部分视图(尽管通常不建议使用视图中的代码):

还有页面上的注释

如果视图需要执行代码,建议使用视图组件而不是局部视图


因此,您应该使用
Partial
并避免使用
partialSync
,如果您发现自己使用的是
partialSync
,您应该质疑自己是否做错了什么,也许您应该改为使用ViewComponent,或者将逻辑从视图移动到控制器。

实际上,
wait
生成当前线程,直到任务完成。这与等待状态无关。首先,我不是专门讨论
async
关键字,这里只是一般意义上的async。第二,我不知道你最后一句话是什么意思。这一切都与处于等待状态有关。线程不仅仅是自动产生的。它必须一直工作,直到等待它无法控制的东西:数据通过电线传输,硬盘驱动器旋转,等等。一旦不再等待,代码就需要线程返回以完成正在进行的任何工作。这不一定是“错误的”。呈现分区需要访问文件系统。文件系统有一个队列,根据当时服务器上发生的其他情况,可能需要等待时间。任何可能需要等待的操作都符合异步的条件,因此在这方面,使用类似于
partialsync
的东西是完全有效的。我的观点是,在大多数环境和情况下,使用async来呈现部分内容会弄巧成拙,在使用async时,您应该始终评估您的特定场景。不要仅仅因为异步就使用它。@ta.speot.is:True。然而,这不是重点。如果你做的是异步操作,那么是的,使用异步,但问题是教程和类似的东西往往没有区别,不太了解情况的开发人员会觉得你应该使用异步,因为这是教程、书籍、视频等所做的。如果您只是渲染一个视图,那么异步执行可能不是正确的方法。是的。视图组件是异步的,如果您的分部正在做任何异步的事情,它本身应该是异步的。老实说,您可能会更经常地使用async。我只是想指出一点,在某些场景中,同步可能会更好,因为大多数开发人员实际上并不是在逐个场景中考虑同步。现在使用asp.net core 2.1,同样的文档提到不推荐使用同步等价物,因为在某些情况下它们会死锁。未来的版本将不包含同步方法。在ASP.NET 3.1中,当使用
部分
而不是
等待时,将发出警告。。PartialAsync
,因此现在不存在进退两难的问题。
@await Html.PartialAsync("_LoginPartial")
@Html.Partial("_LoginPartial")