2013-01-07 206 views
5

擴展方法,我想通過實現一個擴展方法等待陣列;通過實施陣列

public static IAwaitable GetAwaiter(this mytype[] t) 
{ 
    return t.First().GetAwaiter(); 
} 
使數組awaitable

但即使智能感知說「(awaitable)mytype[]」,編譯器使用

當給我一個錯誤
mytype[] t = new mytype[] { new mytype(), new mytype() }; 
await t; 

調用正在等待mytype的單個對象工作正常。這是爲什麼?難道我做錯了什麼?謝謝你的幫助。

+0

await用於異步調用,爲什麼你使用它的類型? – prthrokz

+1

你有什麼錯誤? –

+1

順便說一句:使用['TaskCompletionSource '](http://msdn.microsoft.com/en-us/library/dd449174.aspx)似乎比自己實現一個awaitable類更好:http://stackoverflow.com/ question/6731815/asyncctp-creating-a-class-that-is-iawaitable –

回答

3

我認爲這是編譯器中的一個錯誤,你應該report it

我可以驗證此代碼不起作用(使用TaskTaskAwaiter,而不是自定義類型):

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

Task[] tasks = …; 
await tasks; 

(它產生的錯誤「無法等待「System.Threading.Tasks.Task [] 「」,如報告)

但交換陣列IEnumerable(在兩個方法和本地)不工作:

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

IEnumerable<Task> tasks = …; 
await tasks; 

INTERES有趣的是,使用固定版本,直接等待數組仍然不起作用。但例如等待IList確實有效。

+0

我遵循你的建議並報告了它(請參閱https://connect.microsoft.com/VisualStudio/feedback/details/775990/await-array-by-implementing-extension-method-for-array-does-not-compile) 。感謝您的調查努力。 – David