0
我有一個.NET庫,它在內部使用ParallelQueryable和Parallel.ForEach來並行計算。WebApi的異步上下文是否使用TaskParallel滴入庫?
現在,該庫正在被WebApi應用程序使用。我知道WebApi使用異步上下文來防止併發訪問當前請求。我的問題是,WebApi使用這種上下文會以任何方式影響庫的內部並行計算(例如,所有的連續操作都必須在「GUI」線程上執行?)?
我有一個.NET庫,它在內部使用ParallelQueryable和Parallel.ForEach來並行計算。WebApi的異步上下文是否使用TaskParallel滴入庫?
現在,該庫正在被WebApi應用程序使用。我知道WebApi使用異步上下文來防止併發訪問當前請求。我的問題是,WebApi使用這種上下文會以任何方式影響庫的內部並行計算(例如,所有的連續操作都必須在「GUI」線程上執行?)?
如果TPL按照您所描述的方式行事,那就沒什麼意義了。 PLINQ和Parallel.ForEach()
的全部要點是並行執行代碼。使用同步上下文(在ASP.NET或GUI應用程序中)執行這些將意味着它們不會並行執行。因此,PLINQ,Parallel.ForEach()
和Task.Run()
不使用同步上下文。
在Web API主機上使用'Parallel.For'不是一個好習慣 - 除非這個過程需要幾分鐘,在這種情況下更好的使用其他選項。它將竊取ASP.NET使用的相同線程,因此可能導致線程匱乏。 – Aliostad
@Aliostad:在這種情況下,WebApi服務器的存在是爲了將運行潛在的長時間運行計算的庫方法公開爲Web服務。你是否建議多線程庫代碼像自己的進程一樣運行? – ChaseMedallion
不是這麼說的。我說的是服務器上的多線程並不好。你需要小心。 – Aliostad