En Asp.Net uso un montón de métodos estáticos para los trabajos a realizar. Si es simplemente un trabajo donde necesito sin respuesta o estado, hago algo simple como a continuación. Como se puede ver que puedo optar por llamar a cualquiera ResizeImages o ResizeImagesAsync dependiendo si quiero esperar a que termine o no
explicación Código: Consumo http://imageresizing.net/ cambiar el tamaño de las imágenes/de los cultivos y el método SaveBlobPng es almacenar las imágenes a Azure (nube) pero como eso es irrelevante para esta demostración, no incluí ese código. Es un buen ejemplo de tareas que consumen tiempo, aunque
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 ir a rosca para que no tenga que molestarse con delegados
private static void ResizeImagesAsync(string tempuri, Dictionary<string, string> versions)
{
Thread t = new Thread (() => ResizeImages(tempuri, versions, null, null));
t.Start();
}
Sólo Quería mencionar: hay 2 formas de realizar llamadas asíncronas: con hilos y con delegados. –
Es muy simple. Usted crea un delegado. Asignarle tu función y luego realizar una llamada asíncrona. [Este] (http://msdn.microsoft.com/en-us/magazine/cc301332.aspx) artículo lo describe muy bien (también le enseña qué es un delegado). –
¿El enlace no funcionó para mí? –