2013-08-16 6 views
8

Xamarin released destek belirir. Bundan faydalanmak ve şu andan itibaren async/await öğelerini kullanarak kodumun programlama düzeyini artırmak istiyorum. AncakC#/MonoTouch: Bir ViewController oluşturulduğunda bir zaman uyumsuz yöntemini çağırmak nasıl/gerçekten mobil platformlarda duyarlı UI gelişimini kolaylaştırır <code>async</code>/<code>await</code> için

, C# için görece yeni ve ben async yöntemlerini çağırabilirsiniz benim kodunda 'kanca' bulmak için sorun yaşıyorum önce async/await kullanmadıysanız beri. O olay işleyicileri tipik yerleri (IOC olur nerede) biliyorum, ama şu senaryoyu düşünün:

Bir ViewController (aksine bir düğmeye basıldığında) yüklenen arka plan görevi başlatmak istiyor . ViewDidLoad bir zaman uyumsuz yöntem ne de bir olay işleyicisi ne olduğundan

async Task PerformMyTaskAsync() 
{ 
    // ... 
    await ... // another async API 
    // ... 
} 

public override void ViewDidLoad() 
{ 
    base.ViewDidLoad(); 

    // .. initialize UI 
    await PerformMyTaskAsync(); 
} 

Açıkçası ben ViewDidLoad içinde PerformMyTaskAsync için bekliyor olamaz.

Görünüm denetleyicisi yüklendiğinde (veya herhangi bir şekilde görünürse) arka plan görevini başlatmak için 'alternatif' yaklaşım nedir?

+0

kontrol dışarı dün canlı izledim zaman uyumsuz http://blog.xamarin.com/csharp-async-on-ios-and-android/ –

+0

tarihinde Miguel tarafından bir web semineri. Miguel tarafından yapılan büyük bir açıklama, ama tam olarak ne istediğimi kapsama. Yine de bağlantı için teşekkürler. –

cevap

17

En yeni Xamarin Sabit Kanal sürümleri, ViewController Lifecycle yöntemleri için Async/Await aşırı yüklerini destekler. Deneyin:

public async override void ViewDidLoad() 
+0

Bunu bilmiyordum, bu yüzden benim problemim çözüldü! –

+0

Ve async ise yöntemin geçersiz olmaması gerektiği uyarısı ne olacak? – Chucky

+0

@Chucky Genellikle * asla * birçok sorunu, dolayısıyla uyarıyı önlemek için bir async yönteminden geçersiz dönmek isteyebilirsiniz. Tek istisnalar olay işleyicileri ve bu durumda yaşam döngüsü yöntemleri içindir (bu durumda uyarıyı göz ardı etmeyeceksiniz). Async void içindeki herhangi bir kodu try-catch'a sardığınızdan emin olun. – Seafish

1

Bunun "en iyi" yaklaşım olup olmadığından emin değilsiniz, ancak ViewDidLoad() içinden bir olayı tetiklemeyi denediniz mi ve sonra da bu olay için işleyicide Async kodunuzu başlatmayı denediniz mi?

+0

Güzel bir çözüm gibi görünüyor, bunu yaparken başka bir kod görmedim, ama belki bu bir kalıp haline gelir. –

İlgili konular