SORU
25 Mart 2014, Salı


Ne zaman Görev kullanırım.() Verim?

Zaman uyumsuz bekliyor/kullanma ve Task çok çalışıyorum ama asla Task.Yield() kullanarak ve tüm açıklamalara rağmen dürüst olmak gerekirse, bu yöntem gerekir neden anlamıyorum.

Biri Yield() gerekli olduğu iyi bir örnek verebilir misiniz?

CEVAP
25 Mart 2014, Salı


async/awaitkullandığınızda await FooAsync() yaptığınızda dediğiniz yöntem aslında uyumsuz olarak çalışacağını garanti yok. İç uygulama tamamen senkronize bir yolu kullanarak dönmek ücretsizdir.

Eğer sen yapmak bir API burada kritik olan yok engelleyebilir ve size biraz zaman uyumsuz kod ve orada bir şans bu denilen yöntem çalışacaktır eşzamanlı olarak (etkili engelleme) kullanarak await Task.Yield() irade gücü yöntemi için zaman uyumsuz ve dönüş kontrolü bu noktada. Kodun geri kalanı daha sonra bu aşamada, hala eşzamanlı olarak çalışabilir () geçerli bağlama göre yürütülür.

Bu da bazı "uzun" başlatma, yani: . koşu gerektiren bir zaman uyumsuz yöntem yaparsanız faydalı olabilir

 private async void button_Click(object sender, EventArgs e)
 {
      await Task.Yield(); // Make us async right away

      var data = ExecuteFooOnUIThread(); // This will run on the UI thread at some point later

      await UseDataAsync(data);
 }

Task.Yield() ara vermeden, bu yöntem zaman uyumlu await İlk Çağrı bir şekilde yürütülür.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010
  • Ricardo Cerqueira

    Ricardo Cerq

    28 Mayıs 2008
  • Willie D.

    Willie D.

    16 Aralık 2006