等待阵列;通过实施阵列
问题描述:
扩展方法,我想通过实现一个扩展方法等待阵列;通过实施阵列
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的单个对象工作正常。这是为什么?难道我做错了什么?谢谢你的帮助。
答
我认为这是编译器中的一个错误,你应该report it。
我可以验证此代码不起作用(使用Task
和TaskAwaiter
,而不是自定义类型):
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
await用于异步调用,为什么你使用它的类型? – prthrokz
你有什么错误? –
顺便说一句:使用['TaskCompletionSource'](http://msdn.microsoft.com/en-us/library/dd449174.aspx)似乎比自己实现一个awaitable类更好:http://stackoverflow.com/ question/6731815/asyncctp-creating-a-class-that-is-iawaitable –