Abbiamo a che fare con un problema interessante su StackOverflow.
Abbiamo un sacco di piccoli "compiti da fare presto". Un esempio è l'aggiornamento degli elenchi "Domande correlate". Quello che abbiamo fatto in passato è quello di portare a termine queste attività sui carichi di pagine di alcuni utenti.
Questo non era mai l'ideale, ma non era davvero evidente. Ora che SO ha superato i 1.000.000 di domande, quegli sfortunati utenti iniziano a sentirlo.
La soluzione naturale è in realtà spingere queste attività in background. Ci sono due modi per fare ciò che sto considerando.
1. In IIS come pool di thread personalizzato / coda di lavoro
Fondamentalmente, selezioniamo alcuni (non- ThreadPool , quindi per non interferire con IIS) thread e avere loro servizi alcune collezioni stiamo spingendo Funcs in .
Il grande professionista qui è la semplicità. Non dobbiamo preoccuparci di eseguire il marshalling di qualsiasi cosa, né dobbiamo assicurarci che alcuni servizi esterni siano attivi e rispondenti.
Abbiamo anche accesso a tutto il nostro codice comune.
Il congo è, beh, che non dovremmo usare thread in background. Le obiezioni che conosco sono tutte incentrate sulla fame di IIS (se usi ThreadPool) e sui thread che muoiono a caso (a causa del riciclo di AppPool).
Abbiamo un'infrastruttura esistente per rendere la morte del thread casuale un non-problema (è possibile abbandonare un task, in pratica), e limitare il numero di thread (e usare thread non-ThreadPool) non è sia difficile.
Spostato su StackOverflow , in quanto non è stato davvero affrontato qui.
2. Come servizio
O una soluzione di terze parti o personalizzata.
Fondamentalmente, dovremmo fare il marshalling di un compito attraverso il limite del processo verso qualche servizio e semplicemente dimenticarlo. Presumibilmente stiamo collegando del codice o limitato a SQL raw + una stringa di connessione.
Il professionista è quello il "modo giusto" per farlo.
I contro sono che siamo molto limitati in ciò che possiamo fare, o dovremo elaborare un sistema per mantenere questo servizio in sincrono con la nostra base di codice. Dovremo anche collegare in qualche modo tutto il nostro monitoraggio e la registrazione degli errori, che otteniamo gratuitamente con l'opzione "In IIS".
Vi sono altri vantaggi o problemi nell'approccio del servizio?
In poche parole, ci sono problemi non risolti e insormontabili che rendono impraticabile l'approccio n. 1 e, in tal caso, ci sono buoni servizi di terze parti che dovremmo analizzare per l'approccio n. 2?