2013-01-07 20 views
5

için uzatma yöntemi uygulayarak ben bir uzantısı yöntemidizisini bekliyor; dizinin

public static IAwaitable GetAwaiter(this mytype[] t) 
{ 
    return t.First().GetAwaiter(); 
} 
uygulayarak bir dizi awaitable yapmak istedim

ancak IntelliSense diyor rağmen

kullanırken, derleyici bana bir hata veriyor " mytype[] (awaitable)"
mytype[] t = new mytype[] { new mytype(), new mytype() }; 
await t; 

Tek bir nesne üzerinde beklemek çağrısı iyi çalışır. Neden? Yanlış bir şey mi yapıyorum? Yardım ettiğin için teşekkür ederim.

+0

beklemeye uyma çağrılarında kullanılır, neden bunları türlerle kullanıyorsunuz? – prthrokz

+1

Ne tür bir hata alıyorsunuz? –

+1

BTW: ['TaskCompletionSource '] (http://msdn.microsoft.com/en-us/library/dd449174.aspx) kullanımı, kendinizi beklemekte olan bir sınıfı uygulamaktan daha iyi görünüyor: http://stackoverflow.com/ sorular/6731815/asyncctp-oluşturma-bir-sınıf-bu-iawaitable –

cevap

3

Bu derleyici bir hata olduğunu ve report it gerekir.

Bu kodu (değil özel tipleri Task ve TaskAwaiter kullanarak) çalışmıyor doğrulayabilirsiniz:

public static TaskAwaiter GetAwaiter(this Task[] tasks) 
{ 
    return tasks.First().GetAwaiter(); 
} 

Task[] tasks = …; 
await tasks; 

(Bu hata üretir "] [ 'System.Threading.Tasks.Task bekliyor Can not '", olarak bildirilmiştir)

Ancak yöntem ve yerel) hem de (IEnumerable için dizi takas yapar çalışması.

public static TaskAwaiter GetAwaiter(this IEnumerable<Task> tasks) 
{ 
    return tasks.First().GetAwaiter(); 
} 

IEnumerable<Task> tasks = …; 
await tasks; 

Interes Sabit versiyonla birlikte, bir diziyi doğrudan beklemek hala çalışmıyor. Ama örneğin IList bekliyor çalışıyor.

+0

Tavsiyenizi takip ettim ve bildirdim (bkz. Https://connect.microsoft.com/VisualStudio/feedback/details/775990/await-array-by-implementing-extension-method-for-array-does-not-compile) . Soruşturma çabanız için teşekkürler. – David