使用来自WCF的TPL任务
为了优化一些服务器端数据库调用,我决定使用System.Threading.Tasks.Task并行化几个数据库调用,然后使用Task.WaitAll()获取所有结果,打包并通过WCF发送给客户端。在VisualStudio(cassini)中的dev web服务器上进行测试时,这似乎可以正常工作,但在部署到IIS时不起作用。对客户端调用(使用firebug)进行分析表明,调用可以到达IIS,但没有相应的调用提交到SQL Server使用来自WCF的TPL任务,wcf,iis,task,task-parallel-library,Wcf,Iis,Task,Task Parallel Library,为了优化一些服务器端数据库调用,我决定使用System.Threading.Tasks.Task并行化几个数据库调用,然后使用Task.WaitAll()获取所有结果,打包并通过WCF发送给客户端。在VisualStudio(cassini)中的dev web服务器上进行测试时,这似乎可以正常工作,但在部署到IIS时不起作用。对客户端调用(使用firebug)进行分析表明,调用可以到达IIS,但没有相应的调用提交到SQL Server 有人经历过这个吗?在IIS中使用任务是否有限制?没有直接限制
有人经历过这个吗?在IIS中使用任务是否有限制?没有直接限制-但是,当您使用任务时,它会在线程池上调度任务。默认情况下,IIS为整个IIS进程共享一个线程池,这可能(特别是在繁忙的服务器上)导致线程不足。这意味着在处理任务时,关于使用线程池的相同指导也适用。看
为了确定这是否是问题所在,至少作为测试,您可以使用提示生成所有任务实例。这将导致默认TaskScheduler在其自己的专用(新)线程上创建任务,而不是使用线程池线程。虽然我不认为这是一个长期解决方案的好主意,但您可以验证是线程池不足导致了您的问题。如果是,您可以确定其他选项,例如可能使用自定义TaskScheduler来管理此操作的线程/任务。谢谢Reed-一些好信息。我很有信心这不是线程饥饿,但我需要做更多的调查。在我前进的过程中,会发布我的发现吗?有什么发现吗?我也有类似的问题,很好奇这会有什么结果?