等待阵列;通过实施阵列

问题描述:

扩展方法,我想通过实现一个扩展方法等待阵列;通过实施阵列

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 –

我认为这是编译器中的一个错误,你应该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