在MVC中使用async进行操作

时间:2016-05-09 18:17:27

标签: c# asp.net-mvc multithreading asynchronous

我是img { position: relative; border: 4px solid transparent; border-radius: 10px; background: linear-gradient(orange, violet); background-clip: padding-box; background: linear-gradient(to bottom, #E2B0C7 0%, #BB96C2 100%); /* just to show box-shadow still works fine */ box-shadow: 0 3px 9px black, inset 0 0 9px white; } img::after{ position: absolute; top: -4px; bottom: -4px; left: -4px; right: -4px; background: linear-gradient(to bottom, #E2B0C7 0%, #BB96C2 100%); content: ''; z-index: -1; border-radius: 16px; } 的新手,所以如果答案显而易见,我会提前道歉。在MVC中,如果我想运行一个对返回的数据没有影响的任务(例如分析),async无效,或者您只需启动一个完全不同的线程。如果我理解正确使用async void对这种情况没有帮助,因为我们仍然不会返回结果(即使实际操作未标记async),直到所有任务完成。

是否可以在不强制多线程的情况下使用async来实现并发?

1 个答案:

答案 0 :(得分:3)

异步仅允许线程在进入等待状态时返回池。这通常发生在I / O操作中,可以是本地(读取/写入文件系统上的文件)或远程操作(例如对API或数据库查询的Web请求)。正如您所看到的那样,它与多处理或后台处理无关,这两者都是完全不同的概念。

就产生新线程而言,这在Web应用程序的上下文中实际上是非常危险的。任何Web应用程序都不应该手动生成线程。但是,无论如何它都无济于事,因为线程必须仍然在请求管道的上下文中运行,因此您仍然不会在后台执行任何操作。

如果您需要在后台和请求 - 响应周期之外真正处理某些任务,那么您需要为此目的使用工具。需要研究的几个好问题是RevaleeHangfire