In Asp.Net I use a lot of static methods for jobs to be done. If its simply a job where I need no response or status, I do something simple like below. As you can see I can choose to call either ResizeImages or ResizeImagesAsync depending if I want to wait for it to finish or not
Code explanation: I use http://imageresizing.net/ to resize/crop images and the method SaveBlobPng is to store the images to Azure (cloud) but since that is irrelevant for this demo I didn't include that code. Its a good example of time consuming tasks though
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(); } }
Or going for threading so you dont have to bother with Delegates
private static void ResizeImagesAsync(string tempuri, Dictionary<string, string> versions) { Thread t = new Thread (() => ResizeImages(tempuri, versions, null, null)); t.Start(); }