В Asp.Net я использую множество статических методов для выполнения заданий. Если это просто работа, где мне нужно нет ответа или статус, я делаю что-то простое, как показано ниже. Как вы можете видеть, я могу выбрать либо ResizeImages, либо ResizeImagesAsync, в зависимости от того, хочу ли я ждать его завершения или нет
Объяснение кода: я использую http://imageresizing.net/ для изменения размера / обрезки изображений, а метод SaveBlobPng - для сохранения изображений в Azure (облако), но поскольку это не имеет значения для этой демонстрации, я не включил это код. Это хороший пример трудоемких задач, хотя
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();
}
}
Или идите за многопоточностью, чтобы вам не пришлось беспокоиться о делегатах
private static void ResizeImagesAsync(string tempuri, Dictionary<string, string> versions)
{
Thread t = new Thread (() => ResizeImages(tempuri, versions, null, null));
t.Start();
}