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". Ciò che abbiamo fatto in passato è riportare queste attività sui carichi di pagina di alcuni utenti.
Questo non è mai stato l'ideale, ma non era davvero evidente. Ora che SO ha superato i 1.000.000 di punti interrogativi, quegli utenti sfortunati stanno iniziando a sentirlo.
La soluzione naturale è quella di spingere effettivamente queste attività in background. Ci sto prendendo in considerazione due modi per farlo.
1. In IIS come pool di thread / coda di lavoro personalizzati
Fondamentalmente, creiamo alcuni thread (non ThreadPool , in modo da non interferire con IIS) e disponiamo di servizi in alcune raccolte in cui stiamo inserendo Funcs .
Il grande professionista qui è la semplicità. Non dobbiamo preoccuparci di fare il marshalling di nulla, né dobbiamo assicurarci che alcuni servizi esterni siano attivi e rispondano.
Abbiamo anche accesso a tutto il nostro codice comune.
La contro è, beh, che non dovremmo usare i thread in background. Le obiezioni che conosco sono tutte incentrate su IIS affamato (se si utilizza ThreadPool) e sui thread che muoiono casualmente (a causa del riciclo di AppPool).
Abbiamo un'infrastruttura esistente per rendere la morte casuale dei thread un problema (in pratica è possibile rilevare un'attività è stata abbandonata) e neanche limitare il numero di thread (e l'utilizzo di thread non ThreadPool).
Spostato in StackOverflow , in quanto non è stato realmente affrontato qui.
2. Come servizio
Qualche soluzione di terze parti o personalizzata.
Fondamentalmente, eseguiremmo un task oltre il limite del processo per alcuni servizi e ci dimenticheremmo. Presumibilmente stiamo collegando del codice o limitato a SQL + grezzo una stringa di connessione.
Il pro è che è il "modo giusto" per farlo.
I contro sono che o siamo molto limitati in ciò che possiamo fare, o dovremo elaborare un sistema per mantenere questo servizio sincronizzato 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".
Ci sono altri vantaggi o problemi con l'approccio del servizio?
In breve, ci sono problemi imprevisti e insormontabili che rendono impraticabile l'approccio n. 1 e, in caso affermativo, ci sono buoni servizi di terze parti che dovremmo esaminare per l'approccio n. 2?