双工Wcf服务器线程 - 在哪里进行同步DB I / O?

时间:2009-09-09 18:18:15

标签: c# wcf multithreading asynchronous

以下是我的基本假设:

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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