Aybars Arslan

Console.WriteLine("Hello World");

C# ile Asenkron Programlama

Asenkron programlama, sürdürülen işlemin main process veya diğer processlerden bağımsız olarak çalışması üzerine yapılan programlamadır. Bir başka değişle, alıştığımız satır satır çalışan kodumuzun asenkron olarak farklı thread üzerinden çalıştırılmasıdır.

Not : Asenkron programlama için .Net Framework 4.5 ve üstünü kullanarak geliştirme yapmalıyız. Asenkron programla .Net’e 4.5 sürümü ile beraber dahil olmuştur.

.Net Framework async programlama yapabilmemiz için bize 3 farklı pattern sunar;

  1. Asynchronous Programming Model (APM) pattern
  2. Event-based Asynchronous Pattern (EAP)
  3. Task-based Asynchronous Pattern (TAP)

Örneklerimizi Task-based Asynchronous Pattern (TAP) model ile  gerçekleştireceğiz.

“async” and “await” Kelimeleri

Await kelimesi : Async metodlarda kullanabilir ve asenkron metodları çağırmadan önce eklenmelidir.

// async keyword used
private static async void AsyncMethod()
{
    // await async method çağırılırken kullanıyor. Diğer threadimiz yoluna devam eder
    string result = await DoAsync();

    // DoAsync() metodu tamamlanmadan bu satır yürütülmez.
    Console.WriteLine(result); 
}

Not : async kelimesi yalnızca Task veya Void dönen metodlar ile kullanılabilir.

Task-based Asynchronous Pattern (TAP)

Async metodlar için metodlarımızın Task veya Task<> dönmesi gereklidir. Task kullanımı için. Task.Run ve Task.Run<> metodu ile biz örneklerimizi yapacağız.

static void Main()
{
    CallSelamAsync();
    //CallContinueSelamAsync();
    Console.WriteLine("Running");
    var a = 10 + 4;
    Console.WriteLine(a);
    Thread.Sleep(500);
    Console.WriteLine("Running");
    Console.ReadKey();
}

// Async olan SelamAsync metodunu çağırıyoruz.
private static async void CallSelamAsync()
{
    string result = await SelamAsync("Ali");
    Console.WriteLine(result);
}

// SelamAsync tamamlanır tamamlanmaz çağırılacak bölümdür.
private static void CallContinueSelamAsync()
{
    Task<string> t1 = SelamAsync("Ali");
    t1.ContinueWith(t =>
    {
        string result = t.Result;

        Console.WriteLine(result);
    });
}

// Senkron metodumuz
static string Selam(string name)
{
    Thread.Sleep(1000);
    return $"Selam, {name}";

}

// Task<> task dönürecek async metodumuz
static Task<string> SelamAsync(string name)
{

    return Task.Run<string>(() =>
    {
        return Selam(name);
    });
}

CallSelamAsync() metodu cağırıldığında, await kelimesine sıra gelene kadar normal akışta çalışılır.
await kelimesine sıra geldiğinde metod SelamAsync() işleminin bitmesini bekler. Bu sırada metod içerisindeki diğer işlemler devam eder.

Basit olarak c# ile asenkron programlama teknikleri üzerine bilgi vermeye çalıştım. Umarım faydalı olmuştur.

Paylaş !

, , ,

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir