SORU
27 AĞUSTOS 2012, PAZARTESİ


zaman uyumsuz/Görev vs bir boşluk dönmek için ne bekliyor?

Ne senaryolar altında kullanmak istiyorum

public async Task AsyncMethod(int num)

yerine

public async void AsyncMethod(int num)

Aklıma gelen tek senaryo görevi onu izlemek gerekir.

Ayrıca, aşağıdaki yöntem, zaman uyumsuz ve gereksiz kelimeleri bekliyor?

  public static async void AsyncMethod2(int num)
    {
        await Task.Factory.StartNew(() => Thread.Sleep(num));
    }

CEVAP
27 AĞUSTOS 2012, PAZARTESİ


1) Normalde Task iade etmek isterim. Ana durum size zaman olmalıdırgerekvoid dönüş türü (etkinlikler için). Eğer await Senin görevin arayan sahip vermemek için sebebi varsa hayır, neden buna izin vermemek?

2) 11* *yöntemleri void dönüş başka bir yönüyle özel olan: temsil ediyorlarüst düzey zaman uyumsuz işlemlerive Senin görevin bir özel durum döndürür zaman devreye girer ek kurallar var. En kolay yol farkı bir örnek ile göstermek için:

static async void f()
{
    await h();
}

static async Task g()
{
    await h();
}

static async Task h()
{
    throw new NotImplementedException();
}

private void button1_Click(object sender, EventArgs e)
{
    f();
}

private void button2_Click(object sender, EventArgs e)
{
    g();
}

private void button3_Click(object sender, EventArgs e)
{
    GC.Collect();
}

f'nin özel durum her zaman"". gözlenen Üst düzey bir zaman uyumsuz yöntem bırakmayan bir istisna sadece herhangi bir diğer özel durum olarak değerlendirilir. g'nin özel durum hiçbir zaman görülmektedir. Çöp toplayıcı görevi temizlemek için geldiğinde, söz konusu görev için bir istisna sonuçlandı görüyor ve kimse dışında işlenmiş. Bu olduğunda, TaskScheduler.UnobservedTaskException işleyici çalışır. Bunun olmasına asla izin vermemelisin. Sizin örnek kullanmak için

public static async void AsyncMethod2(int num)
{
    await Task.Factory.StartNew(() => Thread.Sleep(num));
}

Evet, async await burada kullanın, doğru, eğer bir özel durum yöntemi hala çalışıyor emin olun.

daha fazla bilgi için bkz: http://msdn.microsoft.com/en-us/magazine/jj991977.aspx

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BumbleDroid

    BumbleDroid

    18 EKİM 2010
  • Evan Coury

    Evan Coury

    29 NİSAN 2007
  • Le Cargo !

    Le Cargo !

    24 HAZİRAN 2007