Blocco risorse per elaborazione dati

martedì 26 aprile 2016 - 16.20
Tag Elenco Tags  C#  |  .NET 4.0  |  Visual Studio 2010

andrestu Profilo | Expert

Salve a tutti,
sto lavorando ad un progetto in contesto WebForm e volevo sapere se qualcuno sa darmi indicazioni su come "bloccare e rilevare l'elaborazione di un metodo", cerco di spiegarmi meglio.
Semplificando al massimo ho un metodo che esegue la cache dei dati prelevandoli dal database, supponendo che questo metodo impiega diversi minuti ad elaborare la richiesta, dovrei fare in modo di far partire l'elaborazione alla prima chiamata e alle successive chiamate rilevare tale elaborazione fino a che non è stata compiuta.

Faccio un esempio dove due utenti chiamano lo stesso metodo da due browser differenti:

1- utente01 chiama il metodo GetData()
2- il metodo GetData() inizia con l'elaborazione bloccando la risorsa
3- utente01 chiude il browser
4- utente02 chiama il metodo GetData() e viene rilevato che è in fase di elaborazione

Il primo problema da affrontare è come evitare di far interrompere il processo che sta elaborando i dati alla chiusura del browser, questo lo risolvo utilizzando pagine con metodi Async, se ci sono altre modalità accetto suggerimenti.
Successivamente dovrei fare in modo di marcare in qualche modo il metodo che è in fase di elaborazione fino al suo completamento, in modo da poter rilevare tale elaborazione e inviare all'utente l'avviso di attesa, quali strumenti posso utilizzare?

Grazie




Andrea Restucci - Web Developer

vankraster Profilo | Newbie

Dovresti usare una variabile a livello di Applicazione dove memorizzare i dati quindi riuscirai a usarla indifferentemente dalla sessione...

sanghino Profilo | Junior Member

Ciao,
potresti anche prevedere l'utilizzo di una tabella che tracci le esecuzioni del metodo prevedendo una colonna che indichi l'inizio esecuzione, una il termine e magari l'esito. Ad esempio scrivi un record alla prima richiesta con il timestamp di partenza, il secondo utente cerca di eseguire il metodo ma viene riscontrata sulla tabella l'esecuzione ancora pending e quindi blocca. Al termine della prima esecuzione viene scritto il timestamp di fine esecuzione. Se adesso altro utente volesse eseguire il metodo la verifica che implementeresti restituirebbe che non ci sono esecuzioni pending e quindi proseguirebbe.
Che te ne pare ? Con questo metodo devi solo avere l'accortezza di non lasciare esecuzioni pending anche in caso di errore gestendo la chiusura dell'esecuzione nel giusto modo.

Ciao
Sanghino
--------------------------
www.extrageek.com

andrestu Profilo | Expert

vankraster i dati vengono già salvati in cache

Andrea Restucci - Web Developer

andrestu Profilo | Expert

grazie ho risolto con http://hangfire.io/
questo modulo gestisce tutto lui, ovviamente ho dovuto integrare del codice dove verifico se è in corso l'esecuzione del processo in background, la cosa molto utile è che questi processi non sono legati a nessuna sessione quindi anche se chiudo il browser il processo continua ad essere processato in backgroud

Andrea Restucci - Web Developer
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5