2013-01-13 27 views
5

mevcut Görev örneği alın - kullanıcıya iade edilir önce Görev nesnesi nasıl alabilirimbir zaman uyumsuz yöntem gövdesinin

public async Task GetSomething() { 

    await SendText("hi"); 
    await SendImage("bla.bmp"); 

} 

zaman

içinde bekliyor başladı

yani .. böylece başka bir yere

public async Task GetSomething() { 

    myTasks.Add(Task.Current); 
    await SendText("hi"); 
    await SendImage("bla.bmp"); 

    //some processing 

} 

yapabileceğim

await Task.WhenAll(myTasks); 
Console.WriteLine("All tasks complete"); 

Bu, tüm görevler dil "geçerli" görevi erişmek için bir tesis yok gibi bu doğrudan mümkün değildir

+0

'SendText' ve' SendImage' için imzalar nelerdir? – oleksii

+0

Fark yaratmıyor. Bu sadece GetSomething'in çoklu çocuk işlemleri gerçekleştirdiğini gösteren kukla bir kod. Daha net hale getirirse, Thread.Sleep (50000) ile değiştirin. – NoPyGod

+0

Evet öyle. Yöntemler 'void', 'Görev' ve 'Görev 'işlevlerini döndürebilir, eğer' Görev 'veya' Görev ' ise kodu yeniden kodlayabilirsiniz. Görev nesneleri alabilir ve bunları tek bir diziye ekleyebilirsiniz. – oleksii

cevap

4

kapatmadan önce tamamlamak için bekleyemem böylece olduğunu.

Yine de bir geçici çözüm var: Eşzamansız yönteminizi başka bir yöntemde kaydır. Bu diğer yöntemi, async yöntemi döndüğünde (yaklaşık ilk bekleme noktasında gerçekleşen) görevi tutabilir.

Her durumda, arayanın async yöntemini değil, async yöntemini listenize eklemesini öneririm. Bu, kapsülleme açısından bile faydalıdır.

+0

Doğru gibi gözüküyor. Bunun yanlış bir şey yaptığımı mı yoksa böyle bir kullanım durumunun daha önce düşünülmediğini mi bilmiyorum. Tüm asenkron yöntemleri takip etmenin oldukça yaygın olacağını düşündüm. Sanırım kodumu içsel bir işlevle sarmalayarak uyandırmam gerekecek. – NoPyGod

İlgili konular