Domanda

Ecco i miei presupposti di base:

  1. Wcf esegue i miei metodi di operazione di servizio sui thread IOCP (UnsafeQueueNativeOverlapped) anziché sui normali thread ThreadPool (QueueUserWorkItem).

  2. Il blocco dell'I / O dovrebbe non essere eseguito all'interno dei metodi di funzionamento del servizio unidirezionale.

  3. Il blocco dell'I / O dovrebbe non essere eseguito all'interno di un normale thread ThreadPool.

Credo che la migliore strategia sia quella di concatenare le chiamate asincrone . Quindi, se ricevo un messaggio durante l'operazione di servizio unidirezionale, eseguo una chiamata asincrona al mio db e quando ciò viene completato, eseguo la mia successiva chiamata db asincrona, ecc. E infine rispondo tramite il mio callback wcf ...

Tuttavia, è difficile eseguire ogni singola chiamata asincrona al database. Ho fatto ricorso alla violazione delle regole 2 e 3 sopra, ma non mi piace perché credo che alla fine questo morirà di fame. Ci sono strategie migliori?

Ho esaminato l'uso del CustomThreadPool di Jon Skeet, ma non sono sicuro che questa sia la risposta.

È stato utile?

Soluzione

Suggerirei di infrangere la regola 3 accodando chiamate I / O sincrone per l'esecuzione di ThreadPool. I metodi di servizio continuano a tornare immediatamente, ma alla fine il lavoro viene eseguito in background, forse dando il via a una notifica di ritorno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top