ASP.NET 4.5.2 Hosting Indonesia bersama JaringanHosting.com :: Cara Schedule Background Jobs Menggunakan QueueBackgroundWorkItem pada ASP.NET 4.5.2

ASP.NET baru-baru ini merilis versi terbarunya yaitu .NET 4.5.2. Pada versi terbarunya ini ASP.NET mendukung HostingEnvironment.QueueBackgroundWorkItem method ini ditemukan dalam namespace System.Web.Hosting. Pada kesempatan ini saya akan menunjukkan bagaimana Anda dapat menggunakannya untuk menjadwalkan item pekerjaan latar belakang dalam aplikasi ASP.NET.
banner-jarhost-2_zps2ea5225d

Metode HostingEnvironment.QueueBackgroundWorkItem memungkinkan Anda menjadwalkan item pekerjaan latar belakang yang kecil. ASP.NET mencegah IIS untuk mengakhiri proses pekerja secara tiba-tiba sampai semua item pekerjaan latar belakang telah selesai.

Alasan untuk menggunakan QueueBackgroundWorkItem adalah Anda tidak perlu khawatir tentang proses pada IIS yang berhenti sebelum waktunya.

Dasar Penggunaan Metode QueueBackgroundWorkItem
Metode QueueBackgroundWorkItem mendefinisikan dua overloads, yang masing-masing menerima satu parameter. Anda dapat melewati salah satu jenis delegasi berikut:
Action
Func<CancellationToken, Task>

Berikut adalah bagaimana Anda bisa melewati ekspresi lambda untuk overload pertama:
HostingEnvironment.QueueBackgroundWorkItem(cancellationToken =>
{
// Some long-running job
});

HostingEnvironment.QueueBackgroundWorkItem(async cancellationToken =>
{
var result = await LongRunningMethodAsync();

// Do something with result
// …
});

private void QueueWorkItem()
{
Func workItem = LongRunningMethodAsync;
HostingEnvironment.QueueBackgroundWorkItem(workItem);
}

private async Task LongRunningMethodAsync(CancellationToken cancellationToken)
{
// Some long-running job
}

Berikut adalah contoh yang lebih lengkap tentang bagaimana QueueBackgroundWorkItem dapat digunakan dalam controller ASP.NET MVC. Setelah menciptakan beberapa model, controller register item pekerjaan latar belakang yang membuat panggilan (berpotensi) lama berjalan ke API remote:
public class FooController : Controller
{
[HttpPost] public ActionResult Create(FooInputModel input)
{
// Process the input somehow
// ...

Action workItem = PostToRemoteService;
HostingEnvironment.QueueBackgroundWorkItem(workItem);

return View();
}

private async void PostToRemoteService(CancellationToken cancellationToken)
{
using (var client = new HttpClient())
{
var response = await client.PostAsync(“http://example.com/endpoint”,
new StringContent(“…”), cancellationToken);

// Do something with response
// …
}
}

// More action methods
// …
}

 

Leave a Reply