2014-12-03 9 views
7

ben ASP.NET bazı kodlama yapıyordu: Ben nasıl async/await eser daha iyi anlaşılmasını varASP.NET olay işleyicilerinde uyumsuz/beklemeyi kullanmak güvenli midir? Bunu karşısında geldiğimde

protected async void someButtonClickHandler(...) 
{ 
    if(await blah) 
     doSomething(); 
    else 
     doSomethingElse(); 
} 

this soruyu soran sonra. Ama sonra bana vurdu, yukarıda gösterilen şekilde async/await'u kullanmak güvenli midir?
await blah numaralı telefonu aradıktan sonra arayan yürütmeyi sürdürür. Bu, yanıtın await blah tamamlanmadan önce müşteriye geri dönüşebileceği anlamına gelir. Bu doğru mu? Ve bu durumda, doSomething()/doSomethingElse()'a ne olur. Hiç infaz edilecekler mi? Eğer idam edilirse, kullanıcı değişikliklerinin etkilerini görüyor mu?
Benim durumumda, bu yöntemler kullanıcıya gösterilen bazı verileri değiştirir, fakat genel durumda ne olacağını bilmek isterim.

+0

Bu web formları için mi? –

+0

@JonathanAllen evet. – atoMerz

cevap

13

Evet, güvenli, ancak gerçekten önerilmez. recommended way to do this is via RegisterAsyncTask. Ancak, ASP.NET (Web Formları) async void olay işleyicilerini doğru şekilde işleyecektir.

İşleyici, işleyici await s olduğunda istemciye işlenmez; await yalnızca istemciye değil, ASP.NET çalışma zamanına verilir. ASP.NET çalışma zamanı, olay işleyicisinin tamamlanmadığının farkındadır, bu nedenle yanıt göndermemeyi bilmez. Olay işleyicisi tamamlandığında, ASP.NET çalışma zamanı yanıtı o zaman göndererek yanıt verir.

Yararlı bulabileceğiniz bir MSDN article on async ASP.NET sahibim. ASP.NET çalışma zamanının async işleyicisinin tamamlanmadığının farkında olduğunu merak ediyorsanız, bunu an earlier MSDN article içinde kapatıyorum.

+1

ilk bağlantınız şu anda eksik. – Fredou

+1

@Fredou: Link is right; ASP.NET sitesinde bir sorun var. İçeriği görünene kadar yenileyin. –

İlgili konular