Pergunta

Aqui estão as minhas premissas básicas:

  1. Wcf executa os meus métodos de operação de serviços em segmentos de IOCP (UnsafeQueueNativeOverlapped) em vez de tópicos ThreadPool normais (QueueUserWorkItem).

  2. Bloqueio de I / O deve não ser feito dentro de métodos de operação de serviço de sentido único.

  3. Bloqueio de I / O deve não ser feito dentro de um segmento ThreadPool normal.

Acredito que a melhor estratégia é cadeia assíncronos chamadas . Então, se eu receber uma mensagem em minha operação de serviço one-way, eu, em seguida, fazer uma chamada assíncrona para o meu db e quando que completa, fazer o meu apelo próxima assíncrona db, etc. e, finalmente, responder através do meu WCF callback ...

No entanto, é difícil de fazer cada assíncrono chamada de banco de dados. I têm recorrido a quebrar as regras 2 e 3 acima, mas eu não gosto disso porque eu acredito que isso vai morrer de fome o ThreadPool eventualmente. Existem quaisquer estratégias melhores?

Eu olhei em usar CustomThreadPool de Jon Skeet, mas eu não tenho certeza se essa é a resposta.

Foi útil?

Solução

Eu sugeriria regra quebra 3 por fila chamadas síncronas de E / S para o ThreadPool para executar. Os métodos de serviço ainda retornar imediatamente, mas o trabalho é feito em segundo plano, eventualmente, talvez dando início a uma notificação de retorno.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top