使用 Asp.Net 核心 Mvc 或 Razor Pages 构建的 Web 应用程序中是否使用任务并行库、PLINQ 或并发集合?

Is Task parallel library, PLINQ or Concurrent Collections used in Web Applications built with Asp.Net core Mvc or Razor Pages?

我是 C#、.Net 核心的初学者。因此,我对这个高级主题(任务并行库、PLINQ 或并发集合)的了解非常有限。如果我的问题看起来很愚蠢,那么我非常抱歉。

我使用 Asp.Net 核心 MVC 和 Razor 页面开发了小型 Web 应用程序。我在那些 Web 应用程序中使用了异步和等待,但从未有机会使用 TPL 或 PLINQ 或并发集合。目前我正在学习多线程,我正在寻找机会在我的 Web 应用程序中实现 TPL、PLINQ 或并发集合。

这是我的查询,

  1. 在使用 Asp.Net 核心 MVC 或 Razor Pages 构建的 Web 应用程序中是否使用任务并行库、PLINQ 或并发集合?
  2. 如果用到,那么TPL、PLINQ比async更适合的情况是什么
  3. 是否有与此主题相关的教程?

[更新]

如果我在实用程序库或存储库服务中使用 PLINQ 或 TPL 或并发集合,这对我的 Web 应用程序来说会不会太多,或者它会在我的 Web 应用程序中造成死锁或阻塞 [.net core]

或者我把简单的事情变得很复杂??

谢谢。

Is Task parallel library, PLINQ or Concurrent Collections used in Web Applications built with Asp.Net core MVC or Razor Pages??

简短的回答是:不支持 PLINQ & multi-threading。

首先,async/await 环绕 Task class,这是 TPL 的一部分。

其次,在 ASP.NET(核心)应用程序中进行并行处理和旋转多个工作线程被认为是不好的做法。

在 ASP.NET Core 中,您使用 TPL 和 async/await 进行真正的异步操作(网络调用、I/O 访问(文件访问)、数据库调用等) ,其中应用程序必须等待外部硬件组件完成。

CPU 绑定任务(计算等 运行 在一个或多个线程上运行)在 ASP.NET 核心应用程序中不等待,只是在主线程上完成(在一个“阻挡”时尚)。

ASP.NET(旧版)曾经有自己的线程池来管理连接,ASP.NET Core 只使用默认的 thread-pool。在遗留 ASP.NET 中,即使您使用 PLINQ 触发多个任务并等待它们,您仍然会为每个请求执行单线程。 ASP.NET核心不会。

不过,放弃自己的任务和线程并不是一个好主意。当请求数量较少(延迟较低)时,它可能会使您的单线程操作更快,但由于线程匮乏和您的应用程序花费大量 CPU 时间管理和在线程之间切换。它还会干扰线程试探法。

同样在线程匮乏时,您的应用程序将不会接受任何新请求。出于这个原因 CPU 绑定任务意味着 运行 同步。 运行 仅通过 Task.Run 进行的 CPU 绑定工作对您没有任何好处。您在等待任务完成时释放了请求线程,但由于您启动了一个新任务,另一个线程被用来处理它。

它类似于运行宁并行任务。当您 运行 每个请求很多时,有一点您必须排队等待许多任务并且许多请求和应用程序停止接受请求并且用户收到可怕的“50x”http 错误,因为您的应用程序不接受新请求因为不启动许多并行任务将允许您在其他任务请求完成时进行更多数量的连接并将它们排队

并发和并行任务对于桌面应用程序很重要,在那里等待它们是有意义的(不阻塞 UI 线程),即使它是一个冗长的执行。此外,在桌面应用程序中,您可以确定该应用程序仅供单个用户使用,因此使用尽可能多的 CPU 核心来快速处理任务是一件非常好的事情。

当您将其应用于 sharedd 应用程序(例如 ASP.NET 核心应用程序,未知数量的用户将与其交互时,它只是不能很好地翻译。