CodeShot
Background Services1 دقیقه مطالعه

Background Services در .NET

سرویسی که مستقل از درخواست‌های HTTP و در پس‌زمینه برنامه اجرا می‌شود، مناسب کارهای زمان‌بندی‌شده و Queue.

چرا مهم است؟

بسیاری از کارهای واقعی برنامه (ارسال ایمیل، پردازش Queue، پاکسازی داده) نباید داخل یک Request HTTP انجام شوند — Background Service این کار را درست انجام می‌دهد.

Background Service چیست؟

سرویسی که در پس‌زمینه (Background) اجرا می‌شود و مستقل از درخواست‌های HTTP کار می‌کند.

موارد استفاده

ارسال ایمیل · پردازش Queue · زمان‌بندی Jobها · پاکسازی داده‌های قدیمی · همگام‌سازی اطلاعات با سرویس‌های دیگر · Health Check و مانیتورینگ

روش‌های پیاده‌سازی

۱. IHostedService — پایه‌ترین اینترفیس برای ساخت Background Service، با متدهای StartAsync() و StopAsync(). مناسب برای Jobهای ساده یا اجرای عملیات هنگام Start/Shutdown.

۲. BackgroundService — کلاس آماده‌ای که از IHostedService ارث‌بری می‌کند؛ فقط کافی است متد زیر را پیاده‌سازی کنید:

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    while (!stoppingToken.IsCancellationRequested)
    {
        // ...
        await Task.Delay(TimeSpan.FromMinutes(1), stoppingToken);
    }
}

مناسب برای: حلقه‌های طولانی (Loop) · Worker Service · پردازش Queue

ثبت در DI

builder.Services.AddHostedService<MyWorker>();

توقف سرویس

همیشه از CancellationToken برای توقف ایمن (Graceful Shutdown) استفاده کنید.

تأخیر بین اجراها

به‌جای Thread.Sleep() از await Task.Delay(...) استفاده کنید — چون Thread.Sleep بلاک می‌کند و Async نیست.

تفاوت IHostedService و BackgroundService

IHostedService BackgroundService
پیاده‌سازی کنترل بیشتر ساده‌تر
چه متدهایی لازم است StartAsync() و StopAsync() فقط ExecuteAsync()
مناسب Jobهای ساده Workerهای طولانی

بهترین روش‌ها

از Dependency Injection استفاده کنید · عملیات طولانی را Async بنویسید · Exceptionها را Log کنید · از CancellationToken پشتیبانی کنید · از ایجاد Loop بدون Delay خودداری کنید

نکته کلیدی: Background Service بدون وابستگی به درخواست HTTP در پس‌زمینه برنامه اجرا می‌شود؛ می‌توان چند Background Service را در یک برنامه، مستقل از هم و همزمان، از طریق AddHostedService ثبت کرد.

خلاصه

  • Background Service مستقل از HTTP Pipeline و در پس‌زمینه اجرا می‌شود.
  • BackgroundService ساده‌ترین راه پیاده‌سازی است؛ فقط ExecuteAsync را بنویسید.
  • همیشه از CancellationToken برای توقف ایمن و Task.Delay به‌جای Thread.Sleep استفاده کنید.

حالا امتحان کن

🧩آزمون Background Services در .NET6 سؤال · نمره قبولی 60٪
این مطلب مفید بود؟
نشان کردن
مشاهده در Concept Hub ←