我想通过实现扩展方法使数组等待
public static IAwaitable GetAwaiter(this mytype[] t)
{
return t.First().GetAwaiter();
}
但即使IntelliSense说"(等待)mytype[]
",编译器在使用时会给我一个错误
mytype[] t = new mytype[] { new mytype(), new mytype() };
await t;
在mytype的单个对象上调用await工作正常。这是为什么?难道我做错了什么?谢谢你的帮助。
答案 0 :(得分:3)
我认为这是编译器中的一个错误,你应该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;
有趣的是,使用固定版本,直接等待数组仍然无法正常工作。但是,例如等待IList
确实有效。