以下是我的基本假设:

  1. Wcf在IOCP线程(UnsafeQueueNativeOverlapped)上执行我的服务操作方法,而不是普通的ThreadPool线程(QueueUserWorkItem)。

  2. 阻止I / O应该在单向服务操作方法中完成。

  3. 阻止I / O应该在普通的ThreadPool线程内完成。

  4. 我认为最好的策略是链异步调用。所以,如果我在单向服务操作中收到一条消息,那么我会对我的数据库进行异步调用,完成后,执行下一次异步数据库调用等,最后通过我的wcf回调...

    但是,每个数据库调用异步都很困难。我已经使用了上面的规则2和3,但我不喜欢它,因为我相信这最终会使ThreadPool挨饿。有没有更好的策略?

    我已经研究过使用Jon Skeet的CustomThreadPool,但我不确定这是否也是答案。

有帮助吗?

解决方案

我建议通过排队ThreadPool执行的同步I / O调用来破坏规则3。服务方法仍然会立即返回,但工作最终会在后台完成,可能会启动返回通知。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top