2013-10-12 17 views
9

Sto usando asp.net mvc e desidero memorizzare nella cache alcuni dati sull'utente dal database quando raggiunge la home page del sito. Quindi, quando l'utente richiede la pagina iniziale, voglio chiamare un metodo asincrono, che rende le chiamate al database e i dati della cache.Avvio di un'attività senza attendere

Qualsiasi esempio di questo sarebbe fantastico.

+1

Hai provato qualcosa? – SpringLearner

risposta

0
ThreadPool.QueueUserWorkItem((Action<object>)state => 
{ 
    //do your async work 
}, null); 

o Task.StartNew(...)

(scusate la breve risposta, questo può prendere sulla strada giusta o qualcuno può modificare questo per mostrare un esempio completo, per favore?)

+0

Puoi aiutarmi anche dal lato cache, Diciamo che mi occorrono 2 secondi per memorizzare i dati nella cache usando il mio Task.StartNew (...). Se gli utenti accedono a questi dati prima di 2 secondi, come faccio ad aspettare che il thread venga letto dal database e memorizzato nella cache. – user2873833

+0

in tal caso, si salverebbe l'attività in un elenco/dizionario statico e verificherebbe se un'attività è già disponibile. In tal caso, chiamare task.Attendere su di esso e quindi recuperare Task.Result o accedere all'oggetto cache. (btw da non perdere HttpUtility.Cache) – eFloh

15
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
    ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

    Task.Run(()=> DoSomeAsyncStuff()); 

    return View(); 
    } 

    private async void DoSomeAsyncStuff() 
    { 

    } 
} 
+0

Questo ha funzionato per me quando 'DoSomeAsyncStuff()' di per sé appena appeso. Stavo cercando di far funzionare qualcosa come descritto [qui] (http://farazdagi.com/blog/2014/rest-long-running-jobs/). – OutstandingBill

1

I direbbe che si chiama il metodo di memorizzazione nella cache tramite questo:

HostingEnvironment.QueueBackgroundWorkItem(x=> CacheData()); 

In questo modo, non si mantenere veramente la richiesta della pagina iniziale in attesa, in modo che gli utenti possano vedere immediatamente la pagina iniziale, mentre la memorizzazione nella cache avviene in background sul server.

PS: ma sì, si corre un leggero rischio di riciclaggio del dominio delle app rovinando il thread di cache.

Problemi correlati