Trong Asp.Net tôi sử dụng rất nhiều phương pháp tĩnh cho công việc phải làm. Nếu nó chỉ đơn giản là một công việc mà tôi cần không có phản ứng hoặc trạng thái, tôi làm một cái gì đó đơn giản như dưới đây. Như bạn có thể thấy, tôi có thể chọn gọi ResizeImages hoặc ResizeImagesAsync tùy thuộc vào việc tôi muốn đợi nó hoàn thành hay không
Giải thích mã: Tôi sử dụng http://imageresizing.net/ để đổi kích thước/cắt hình ảnh và phương pháp SaveBlobPng là lưu trữ hình ảnh sang Azure (đám mây) nhưng vì điều đó không liên quan đến bản demo này nên tôi không bao gồm mã đó. Đó là một ví dụ tốt về nhiệm vụ tốn thời gian mặc dù
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();
}
}
Hoặc sẽ cho luồng, do đó bạn không cần phải bận tâm với đại biểu
private static void ResizeImagesAsync(string tempuri, Dictionary<string, string> versions)
{
Thread t = new Thread (() => ResizeImages(tempuri, versions, null, null));
t.Start();
}
Chỉ cần muốn đề cập - có 2 cách để thực hiện cuộc gọi không đồng bộ: với chủ đề và với các đại biểu. –
Rất đơn giản. Bạn tạo một đại biểu. Gán chức năng của bạn cho nó và sau đó bạn thực hiện cuộc gọi không đồng bộ. [Điều này] (http://msdn.microsoft.com/en-us/magazine/cc301332.aspx) bài viết mô tả nó rất tốt (nó cũng dạy cho bạn những gì là một đại biểu). –
Liên kết không hoạt động đối với tôi ?? –