2013-05-21 24 views
0

我有一個.NET庫,它在內部使用ParallelQueryable和Parallel.ForEach來並行計算。WebApi的異步上下文是否使用TaskParallel滴入庫?

現在,該庫正在被WebApi應用程序使用。我知道WebApi使用異步上下文來防止併發訪問當前請求。我的問題是,WebApi使用這種上下文會以任何方式影響庫的內部並行計算(例如,所有的連續操作都必須在「GUI」線程上執行?)?

+0

在Web API主機上使用'Parallel.For'不是一個好習慣 - 除非這個過程需要幾分鐘,在這種情況下更好的使用其他選項。它將竊取ASP.NET使用的相同線程,因此可能導致線程匱乏。 – Aliostad

+0

@Aliostad:在這種情況下,WebApi服務器的存在是爲了將運行潛在的長時間運行計算的庫方法公開爲Web服務。你是否建議多線程庫代碼像自己的進程一樣運行? – ChaseMedallion

+0

不是這麼說的。我說的是服務器上的多線程並不好。你需要小心。 – Aliostad

回答

0

如果TPL按照您所描述的方式行事,那就沒什麼意義了。 PLINQ和Parallel.ForEach()的全部要點是並行執行代碼。使用同步上下文(在ASP.NET或GUI應用程序中)執行這些將意味着它們不會並行執行。因此,PLINQ,Parallel.ForEach()Task.Run()不使用同步上下文。