in Asp.Net io uso un sacco di statici metodi di posti di lavoro da fare. Se è semplicemente un lavoro in cui ho bisogno di nessuna risposta o stato, faccio qualcosa di semplice come di seguito. Come si può vedere che posso scegliere di chiamare sia ResizeImages o ResizeImagesAsync a seconda se voglio aspettare che finisca o no
spiegazione Codice: Io uso http://imageresizing.net/ per ridimensionare le immagini/colture e il metodo SaveBlobPng è quello di memorizzare le immagini ad Azure (cloud) ma dato che è irrilevante per questa demo non ho incluso quel codice. La sua un buon esempio di attività che richiede tempo se
private delegate void ResizeImagesDelegate(string tempuri, Dictionary<string, string> versions);
private static void ResizeImagesAsync(string tempuri, Dictionary<string, string> versions)
{
ResizeImagesDelegate worker = new ResizeImagesDelegate(ResizeImages);
worker.BeginInvoke(tempuri, versions, deletetemp, null, null);
}
private static void ResizeImages(string tempuri, Dictionary<string, string> versions)
{
//the job, whatever it might be
foreach (var item in versions)
{
var image = ImageBuilder.Current.Build(tempuri, new ResizeSettings(item.Value));
SaveBlobPng(image, item.Key);
image.Dispose();
}
}
o andare per la filettatura modo da non dover perdere tempo con i delegati
private static void ResizeImagesAsync(string tempuri, Dictionary<string, string> versions)
{
Thread t = new Thread (() => ResizeImages(tempuri, versions, null, null));
t.Start();
}
Solo voluto menzionare - ci sono 2 modi per eseguire chiamate asincrone: con thread e con delegati. –
È molto semplice. Si crea un delegato. Assegna la tua funzione ad esso e poi fai una chiamata asincrona. [Questo] (http://msdn.microsoft.com/en-us/magazine/cc301332.aspx) articolo lo descrive molto bene (ti insegna anche cosa è un delegato). –
Link non ha funzionato per me ?? –