26 messaggi dal 16 febbraio 2001
Buonasera a tutti,
sto affrontando per la prima volta questa tematica.
Ho fatto una procedura che asp.net (vb) che al momento che al primo avvio giornaliero da un qualsiasi browser, avvia una procedura che elabora alcune informazioni. Ovviamente questa situazione blocca tutti gli altri browser nel caso si stia accedendo da postazioni diverse in quanto si accorge dell'elaborazione in corso e rimane in sospeso fino al termine dell'elaborazione.
Ovviamente questa situazione non è sostenibile e vorrei utilizzare l'elaborazione iniziale in modalità asincrona per permettere così a tutti di lavorare indipendentemente dal risultato dell'elaborazione che non è essenziale per il normale lavoro e che solo in secondo tempo metterà a disposizione il risultato finale.
Fin qui mi è tutto chiaro (spero anche a chi legge) ma non so come metterlo in pratica. Ho cercato in rete ma purtroppo gli esempi sono tutti per soluzioni desktop e non so se funzionano anche su applicazioni web.
Mi potete indicare da dove attingere per avere una chiara spigazione?
Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
hai bisogno di un pacchetto tipo Hangfire da referenziare nell'applicazione ASP.NET e che ti permetterà di eseguire dei job in background. All'avvio dell'applicazione (es. dal metodo Application_Start) accodi il job e la sua esecuzione non rallenterà la normale elaborazione delle pagine web.

Eventualmente, puoi permettere agli utenti di monitorare il progresso del job in modo che sappiano quando finirà.

Qui trovi un'applicazione dimostrativa:
https://github.com/BrightSoul/LongRunningJobDemo

E qui una presentazione di hangfire.
http://www.aspitalia.com/script/1190/Utilizzare-Hangfire-Schedulare-Job-ASP.NET-MVC.aspx

Nota: questa non è propriamente programmazione asincrona, ma eseguire job in background. La programmazione asincrona è quella che usa il costrutto async/await per riutilizzare in maniera intelligente i thread del pool di ASP.NET per evitare che restino in attesa di operazioni di I/O, come l'invio di una query al database.

Infine, non so che cosa deve succedere al termine del job ma, se per esempio vai a valorizzare un oggetto globale usato nelle richieste, fallo in maniera thread-safe. Tieni presente che mentre scrivi potrebbero esserci client che leggono lo stesso oggetto e questo non deve avvenire.



ciao,
Moreno

Enjoy learning and just keep making
26 messaggi dal 16 febbraio 2001
Ciao Moreno, scusa ma ti leggo solo ora.
Ti volevo ringraziare per la risposta e a breve provo la tua soluzione.
Grazie e scusa per il ritardo.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.