C# 启动多个线程时Silverlight应用程序没有响应

C# 启动多个线程时Silverlight应用程序没有响应,c#,multithreading,silverlight,C#,Multithreading,Silverlight,我有一个silverlight应用程序,它在服务器端启动了许多作业。每项工作都是一个相互独立的工作单元 我使用了Parallel.ForEach(),它工作得很好,但是我意识到如果我有大量的作业(比如超过300个),当线程数增加50时,silverlight应用程序似乎停止响应(它不会冻结浏览器,但是应该填充数据的网格是空的,小甜甜圈继续旋转) 只有当线程数再次下降(即所有作业都已完成处理)时,才会填充网格 我正在用Asp.net开发服务器(基于cassini)进行测试,我想知道这和它有什么关系

我有一个silverlight应用程序,它在服务器端启动了许多作业。每项工作都是一个相互独立的工作单元

我使用了Parallel.ForEach(),它工作得很好,但是我意识到如果我有大量的作业(比如超过300个),当线程数增加50时,silverlight应用程序似乎停止响应(它不会冻结浏览器,但是应该填充数据的网格是空的,小甜甜圈继续旋转)

只有当线程数再次下降(即所有作业都已完成处理)时,才会填充网格

我正在用Asp.net开发服务器(基于cassini)进行测试,我想知道这和它有什么关系

我还将代码转换为使用异步编程模型,但随着线程的增加,我遇到了同样的问题

你知道这是什么原因吗

法学博士


我曾考虑过使用ThreadPool.SetMaxThread(),但我在某个地方读到,这可能不适用于web托管的应用程序。

如果你用一个并行线程来吞并所有线程,那么就没有任何线程可用于服务WCF请求,而网格可能依赖这些线程来获取它需要显示的数据


您可能希望在ForEach方法中使用ParallelOptions参数来指定一次调度的最大并行操作数

你好,安东尼,谢谢你的回复。这是我第一次尝试使用并行编程,我很确定一定有类似ParallelOptions的东西,但找不到。我要试一试。另外,如果我使用异步模型,是否有类似于ParallelOptions的选项?