SLaks ve Killercam'ın cevapları iyi; Biraz daha içerik ekleyeceğimi düşündüm.
İlk sorunuz esas olarak hangi yöntemlerin işaretlenebileceğiyle ilgilidir async.
Olarak işaretlenmiş bir yöntem asyncdönebilir void, Taskya da Task<T>. Aralarındaki farklar nelerdir?
Bir Task<T>dönen zaman uyumsuz yöntem beklenen edilebilir ve görev tamamlandığında bir T. yukarı buyruğu olacak
Bir Taskdönen zaman uyumsuz yöntem beklenen edilebilir ve görev tamamlamalar, görevin devamı çalıştırmak üzere programlandığı.
Bir voiddönen uyumsuz yöntemi beklenilemeyecek; bu bir "ateş et ve unut" yöntemidir. Zaman uyumsuz olarak çalışır ve ne zaman bittiğini söylemenizin hiçbir yolu yoktur. Bu biraz tuhaf olmaktan çok daha fazlası; SLaks'ın dediği gibi, normalde bunu yalnızca zaman uyumsuz bir olay işleyicisi yaparken yaparsınız. Olay tetiklenir, işleyici çalıştırır; hiç kimse olay işleyicisi tarafından döndürülen görevi "beklemeyecektir" çünkü olay işleyicileri görevleri döndürmez ve dönseler bile, Görev'i bir şey için hangi kod kullanır? Genellikle kontrolü ilk etapta işleyiciye aktaran kullanıcı kodu değildir.
Bir yorumdaki ikinci sorunuz, esasen nelerin awaitöğrenilebileceğiyle ilgilidir:
Ne tür yöntemler geliştirilebilir await? Boşluk döndürme yöntemi kullanılabilir awaitmi?
Hayır, boşluk döndürme yöntemi beklenemez. Derleyici , bir örnek yöntemi veya bir uzantı yöntemi olabilen await M()bir çağrıya çevirir . Beklenen değer, sizi bekleyen bir değer olmalıdır; Açıkça bir boşluk döndürme yöntemi, sizi bekleyen bir değer elde edebileceğiniz bir değer üretmez.M().GetAwaiter()GetAwaiter
Task-dönüş yöntemleri, beklenebilir değerler üretebilir. Üçüncü şahısların, beklenebilecek Tasknesneye benzer kendi uygulamalarını yaratmak isteyeceklerini ve siz de onları bekleyebileceğinizi tahmin ediyoruz. Ancak, beyan izin verilmeyecektir asyncdönüş şey ama bu yöntemler void, Taskya Task<T>.
(GÜNCELLEME: Son cümlem, C # 'ın gelecekteki bir sürümü tarafından tahrif edilmiş olabilir; zaman uyumsuz yöntemler için görev türleri dışında dönüş türlerine izin veren bir teklif var.)
(GÜNCELLEME: Yukarıda bahsedilen özellik C # 7'ye girdi.)