gpt4 book ai didi

wcf - 从 WCF 使用 TPL 任务

转载 作者:行者123 更新时间:2023-12-04 21:31:21 25 4
gpt4 key购买 nike

为了优化一些服务器端数据库调用,我决定使用 System.Threading.Tasks.Task 并行化多个数据库调用,然后使用 Task.WaitAll() 获取所有结果,将它们打包并发送到通过 WCF 的客户端。这在 Visual Studio (cassini) 的开发 Web 服务器上测试时似乎工作正常,但在部署到 IIS 时不起作用。分析客户端调用(使用 firebug)显示调用到达 IIS,但没有相应的调用提交给 SQL Server。

有人遇到过吗?在 IIS 中使用任务有限制吗?

最佳答案

没有直接限制 - 但是,当您使用任务时,它会在线程池上安排任务。默认情况下,IIS 为整个 IIS 进程共享一个线程池,这可能(尤其是在繁忙的服务器上)导致发生线程饥饿。这意味着有关使用 ThreadPool 的相同指南适用于处理任务时。参见 this post for details .

为了查看这是否是问题所在,至少作为测试,您可以使用 TaskCreationOptions.LongRunning 生成所有任务实例。暗示。这将导致默认的 TaskScheduler 在它自己的专用(新)线程上创建任务,而不是使用 ThreadPool 线程。虽然我认为这对于长期解决方案来说不是一个好主意,但您将能够验证它是线程池饥饿导致您的问题。如果是,您可以确定其他选项,例如可能使用自定义 TaskScheduler 来管理此操作的线程/任务。

关于wcf - 从 WCF 使用 TPL 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4962039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com