【发布时间】:2010-07-24 02:05:30
【问题描述】:
我有一个 Silverlight 3 应用程序,它需要调用 WCF 服务。 WCF 服务依次调用 ASMX Web 服务。当 WCF 服务调用完成时,silverlight UI 需要更新。
正在异步调用 WCF。
问题是 Silverlight 应用程序需要调用 WCF 方法(后来在内部调用 asmx)数百次。我知道因为它在 aSync 中,所以会产生数百个线程,所以我已经编写了检查代码以确保调用 WCF 函数的时间不超过 X 时间。只有当 1 个呼叫完成时,我才会再添加一个呼叫。我希望这将检查线程总数。 X 值的理想值是多少?我在一个简单的 XP 机器上,有双核 CPU 和 4 GB 内存。
随着 WCF 调用完成,我需要在 silverlight UI 上显示进度条。
这适用于较少数量的调用,但是当我需要进行大约 10000 次调用时,一段时间后我会在 Silverlight 的 WCFCompleted 方法中超时。我觉得我可能会陷入僵局?
我的 WCF 配置为多个并发。
每次 WCF 调用完成时,它都会更新 UI……这会导致这种死锁吗?
有什么想法吗?我被困在这里,迷路了。
【问题讨论】:
-
所以,如果我需要调用 WCF 10,000 次,我从调用它开始 20 次,当 1 个方法调用完成时,我再添加一个调用,依此类推。
-
如果您使用的是Delegate.BeginInvoke,它应该会自动使用内置的线程池和任务队列,因此您应该不需要管理并发任务的数量。
-
我不确定我是否在内部使用 Delegate.BeginInvoke。我刚刚将 WCF 作为服务引用添加到我的 Silverlight 应用程序。使用其自动生成的代理 XXXBegin 和 XXXComplete 回调方法。
标签: wcf multithreading deadlock asynchronous threadpool