17 Ekim 2017 Salı

async Event Handler

async Event Handler
İstersek event handler için async kullanabiliriz.

Örnek
Elimizde şöyle bir metod olsun. Bu metod bir yere tıklanınca çağrılsın isteyelim.
public async Task<ofSomething> DoSomething(){
  //entry here is on the caller's thread.
  var x =await Task<ofSomething>.Run(()=>{
    //this code will be run independent of calling thread here
    return GetSomething();
  }
  //at this point you are back on the caller's thread.
  //the task.result is returned.
  return x;
}
Event Handler şöyle yazılır
public async void ClickEventHandler(object sender, EvantArgs e){
  var x = await DoSomething();
  //var x now has the ofSomething object on the gui thread here.
}
async lambda
Aynı async Event Handler gibidir.
Örnek
Şöyle yaparız.
Func<Task> asyncAction = async () => await FooAsync(...);
Örnek
Elimizde şöyle bir metod olsun. Bu metod bir yere tıklanınca çağrılsın isteyelim.
async Task Go()
{
  var task = PrintAnswerToLife();
  await task; Console.WriteLine ("Done");
}

_button.Click += (sender, args) => Go();
Açıklaması şöyle. Yani Go metodu farklı bir thread içinde çalışır. UI ise kendi işine devam eder.
Calling an asynchronous method without awaiting it allows the code that follows to execute in parallel.

Despite Go being an asynchronous method, we didn’t await it, and this is indeed what facilitates the concurrency needed to maintain a responsive UI.
Bu kodu şöyle çağırsaydık durum farklı olacaktı.
_button.Click += async(sender, args) => await Go();

Hiç yorum yok:

Yorum Gönder