【问题标题】:Does WebApi's async context trickle down to libraries using TaskParallel?WebApi 的异步上下文是否使用 TaskParallel 渗透到库中?
【发布时间】:2013-05-22 06:57:14
【问题描述】:

我有一个 .NET 库,它在内部使用 ParallelQueryable 和 Parallel.ForEach 来并行化计算。

现在,WebApi 应用程序正在使用该库。我知道 WebApi 使用异步上下文来防止对当前请求的并发访问。我的问题是,WebApi 对这个上下文的使用是否会以任何方式影响库的内部并行计算(例如,是否都必须在“GUI”线程上执行延续?)?

【问题讨论】:

  • 在 Web API 主机上使用 Parallel.For 不是一个好习惯 - 除非该过程可能需要几分钟,在这种情况下最好使用其他选项。它会窃取 ASP.NET 使用的相同线程,因此可能导致线程饥饿。
  • @Aliostad:在这种情况下,WebApi 服务器的存在是为了将可能长时间运行的计算作为 Web 服务运行的库方法公开。您是否建议多线程库代码作为自己的进程运行?
  • 没这么说。我是说服务器上的多线程不是很好。你需要小心。

标签: c# asp.net-web-api task-parallel-library


【解决方案1】:

如果 TPL 的行为方式与您描述的一样,那将没有多大意义。 PLINQ 和Parallel.ForEach() 的全部意义在于并行执行代码。并且使用同步上下文(在 ASP.NET 或 GUI 应用程序中)来执行这些 Tasks 意味着它们不会并行执行。因此,PLINQ、Parallel.ForEach()Task.Run() 不使用同步上下文。

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多