CodeBlanks Logo Icon CodeBlanks

Async katmanı

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

Async/await ve Task kullanarak veri akışı kurarsın.

Async katmanı

Şimdi komutu async yapacağız. ICommand.Execute() yerine Task<string> ExecuteAsync() kullanırız. Böylece komut ağ çağrısı, dosya okuma gibi uzun işler yapabilir; çağıran iş parçacığını bloklamaz.

Main de async olur: static async Task Main(). Çağrı await cmd.ExecuteAsync() ile beklenir. Bu küçük değişiklik, ileride gerçek async işleri (örneğin ağdan veri çekme) eklemeye zemin hazırlar.

async Task Main

C# 7.1'den beri Main async olabilir: static async Task Main(). Bu, await kullanmayı sağlar; GetAwaiter().GetResult() gibi hantal geçici çözümlere gerek kalmaz.

Bir async metot içinde await her çağrıyı bekler. HelloCommand.ExecuteAsync() içinde await Task.CompletedTask zaten tamamlanmış bir Task'ı bekler; bu, gerçek bir async işin yerini tutan iskelet koddur. İleride burayı ağ veya dosya çağrısıyla değiştirebilirsin.

Uygulama Komutu async yap

ICommand arayüzünü async yap: Task<string> ExecuteAsync() metodu olsun. HelloCommand.ExecuteAsync() async Task<string> imzasıyla await Task.CompletedTask çağrısı yapsın ve "Merhaba" döndürsün. Main'i static async Task Main() yap ve await cmd.ExecuteAsync() ile sonucu yazdır.

Örnek çözümü göster
interface ICommand { Task<string> ExecuteAsync(); } yaz. class HelloCommand : ICommand { public async Task<string> ExecuteAsync() { await Task.CompletedTask; return "Merhaba"; } } yaz. Main'i: static async Task Main() { var cmd = new HelloCommand(); Console.WriteLine(await cmd.ExecuteAsync()); } yap.
Örnek çözüm:
using System;
using System.Threading.Tasks;

interface ICommand
{
    Task<string> ExecuteAsync();
}

class HelloCommand : ICommand
{
    public async Task<string> ExecuteAsync()
    {
        await Task.CompletedTask;
        return "Merhaba";
    }
}

class Program
{
    static async Task Main()
    {
        var cmd = new HelloCommand();
        Console.WriteLine(await cmd.ExecuteAsync());
    }
}

Kendini test et

  1. Async komut metodu hangi dönüş türüne sahip olmalı?

    • string
    • Task<string>
    • void
    • int
    Cevabı göster

    Task<string> — Doğru. Task<string> async metottan string sonucu beklemeyi sağlar.

  2. Async Main bildirimini tamamla

    static ____ Task Main() { Console.WriteLine(await cmd.ExecuteAsync()); }
    Cevabı göster
    static async Task Main() { Console.WriteLine(await cmd.ExecuteAsync()); }
  3. Async kavramlarını eşleştir

    Task<string>
    Async dönüş türü
    await
    Task'ı bekler
    async Task Main
    Async giriş noktası
    Task.CompletedTask
    Zaten tamamlanmış Task

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