В 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();
}
Просто хотел упомянуть - есть два способа выполнения асинхронных вызовов: с потоками и с делегатами. –
Это очень просто. Вы создаете делегат. Назначьте свою функцию, а затем выполните асинхронный вызов. [This] (http://msdn.microsoft.com/en-us/magazine/cc301332.aspx) статья описывает это очень хорошо (он также учит вас тому, что является делегатом). –
Ссылка не работает для меня ?? –