CodeBlanks Logo Icon CodeBlanks

Task.Run

C# kursu · İleri seviye · Ders 4/83

Task.Run ile CPU bağımlı işleri arka plana almayı öğrenirsin.

Task.Run nedir?

Task.Run bir işi iş parçacığı havuzuna (thread pool) gönderir ve hemen bir Task döndürür. Ağır CPU işlerini arka planda yürütmek için kullanılır; ana iş parçacığı serbest kalır.

Örnek: Task t = Task.Run(() => HeavyCompute());. Burada lambda, havuzdan alınan bir iş parçacığında çalışır; sen await t ile bitmesini beklersin. Giriş/çıkış işleri için Task.Run kullanma; doğrudan async metot çağır.

Task.Run ve await farkı

Task.Run ile await farklı şeylerdir. Task.Run yeni bir havuz iş parçacığı başlatır; await ise zaten çalışan bir Task'ı bekler. İkisi sıkça birlikte kullanılır: await Task.Run(() => Work()).

Ancak her async çağrıyı Task.Run içine sarmak yaygın bir hatadır. Async metotlar zaten arka planda çalışır; sarmak gereksiz iş parçacığı tüketir. Yalnızca gerçek CPU işleri için kullan.

Uygulama Task.Run ile hesapla

static int Square(int n) metodunu tanımla (n * n döndürsün). Main'i static async Task Main yap. int result = await Task.Run(() => Square(7)); ile hesabı havuzda çalıştır, Console.WriteLine(result); ile yazdır.

Örnek çözümü göster
return n * n;. Main'i static async Task Main() yapıp int result = await Task.Run(() => Square(7)); Console.WriteLine(result);
Örnek çözüm:
using System;
using System.Threading.Tasks;

class Program
{
    static int Square(int n)
    {
        return n * n;
    }

    static async Task Main()
    {
        int result = await Task.Run(() => Square(7));
        Console.WriteLine(result);
    }
}

Kendini test et

  1. Kavramları eşleştir

    Task.Run
    İşi havuza gönderir
    await task
    İşin bitmesini bekler
    CPU işi
    Task.Run için uygundur
    Giriş/çıkış işi
    Doğrudan async metot çağır
  2. Task.Run ne zaman kullanılır?

    • Her async çağrıyı sarmak için
    • Ağdan veri okurken
    • Ağır CPU hesaplamalarını arka planda çalıştırmak için
    • Dosya kaydederken
    Cevabı göster

    Ağır CPU hesaplamalarını arka planda çalıştırmak için — Doğru. Task.Run ağır CPU işlerini arka planda çalıştırmak içindir.

  3. Task.Run çağrısını tamamla

    Task t = Task.____(() => Work());
    Cevabı göster
    Task t = Task.Run(() => Work());

İleri seviye bölümündeki tüm dersler