CodeBlanks Logo Icon CodeBlanks

Task başlatma

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

Task.Run ve Task.Factory.StartNew ile task başlatmayı öğrenirsin.

Task başlatma yolları

C#'ta bir Task'ı birkaç yolla başlatırsın: bir async metot çağırıp await etmek (en temiz yol), Task.Run ile bir CPU işini havuza göndermek, ya da Task.FromResult ile hazır sonuçlu Task üretmek.

Eskiden new Task(...) ile oluşturup .Start() çağrılırdı; bu yol artık önerilmez. Thread sınıfı ise daha düşük düzeydir; async/await yerine kullanılmaz. Yeni kodda async metot + await akışını benimse.

Task.Run ve new Task farkı

Task.Run işi hemen havuza gönderir ve bir Task döndürür. new Task(...) ise Task'ı oluşturur ama başlatmaz; ayrıca .Start() çağrısı gerekir. Bu ek adım hatalara açıktır.

Bu yüzden yeni kodda Task.Run tercih edilir. CPU işi için await Task.Run(() => Work()) desenini kullanırsın. Giriş/çıkış işleri için doğrudan async metot çağır; gereksiz havuz parçacığı tüketme.

Uygulama Task.Run ile iş başlat

static string BuildMessage() metodunu tanımla (return "Hazır";). Main'i static async Task Main yap. string msg = await Task.Run(() => BuildMessage()); ile metni havuzda üret, Console.WriteLine(msg); ile yazdır.

Örnek çözümü göster
BuildMessage gövdesinde return "Hazır"; yaz. Main'i static async Task Main() yapıp string msg = await Task.Run(() => BuildMessage()); Console.WriteLine(msg);
Örnek çözüm:
using System;
using System.Threading.Tasks;

class Program
{
    static string BuildMessage()
    {
        return "Hazır";
    }

    static async Task Main()
    {
        string msg = await Task.Run(() => BuildMessage());
        Console.WriteLine(msg);
    }
}

Kendini test et

  1. Task başlatmanın önerilen yolu nedir?

    • new Task(() => {})
    • async metot çağrısı + await
    • Thread.Start
    • ThreadPool.QueueUserWorkItem
    Cevabı göster

    async metot çağrısı + await — Doğru. async metot çağrısı + await en temiz başlatma yoludur.

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

    Task t = Task.____(() => Work());
    Cevabı göster
    Task t = Task.Run(() => Work());
  3. Task.Run ne döndürür?

    • void
    • Thread
    • Task
    • IEnumerable
    Cevabı göster

    Task — Doğru. Task.Run bir Task döndürür; await ile beklenir.

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