ho questo metodo [HttpPost]
azione:Posso/devo utilizzare un controller asincrono qui? (ASP.NET MVC 3)
[HttpPost]
public ActionResult AddReview(Review review)
{
repository.Add(review);
repository.Save();
repository.UpdateSystemScoring(review.Id); // call SPROC with new Review ID.
return View("Success", review);
}
Quindi, in pratica un utente fa clic su un pulsante, lo aggiungo al mio database (tramite Entity Framework 4.0), salvare le modifiche, e quindi io chiamo una procedura memorizzata con il campo identità, che è la penultima riga di codice.
Questo deve essere fatto dopo la revisione è salvato (come il campo di identità si crea solo una volta Salva si chiama, e EF persiste le modifiche), e si tratta di un livello di sistema di calcolo.
Dal punto di vista utente, lui/lei non/non dovrebbe preoccuparsi che questo calcolo stia accadendo.
Questa procedura può richiedere da 0 a 20 secondi. Non restituisce nulla.
È un candidato per un controller asincrono?
C'è un modo posso aggiungere la revisione, e lasciare che un altro controller asincrono gestire la chiamata di lunga durata SPROC, così l'utente può essere preso alla pagina di successo immediatamente?
devo ammettere (parzialmente vergogno di questo): questa è una riscrittura di un sistema esistente, e nel sistema originale (Web Form ASP.NET), i sparò un altro filo per realizzare l'operazione di cui sopra - motivo per cui mi chiedevo se lo stesso principio può essere applicato a ASP.NET MVC 3.
Io sempre provare ed evitare il multi-threading in ASP.NET ma l'esperienza utente è la priorità numero 1 e io non voglio che la pagina termini.
Quindi - è possibile? Sono anche felice di sentire altre idee. Inoltre, non posso usare i trigger qui, non voglio davvero entrare troppo nel dettaglio del perché - ma non posso.
Davvero? Quando inizialmente ho proposto di farlo (nella versione originale del sistema), sono stato crocifisso da John Saunders e mi è stato chiesto di "leggere su ASP.NET". E sì - non mi interessa il risultato. SPROC non restituisce nulla - apporta solo modifiche ai dati. Quindi - consiglieresti di sparare una discussione come prima? – RPM1984
E cosa intendi con "non dal pool di thread?". Precedentemente stavo semplicemente facendo 'new Thread()', imposta il metodo, passavo i parametri dell'array, ecc. – RPM1984
@ RPM1984, ASP.NET utilizza un pool di thread per soddisfare le richieste. Ci sono thread preinitializzati in questo pool e quando una richiesta arriva in ASP.NET disegna un thread da questo pool. Non crea un nuovo thread perché potrebbe essere costoso. Fare 'new Thread()' è ok perché stai creando un nuovo thread. Potresti anche indicare il post in cui hai * crocifisso * di John Saunders? –