我想通过实现扩展方法使数组等待
public static IAwaitable GetAwaiter(this mytype[] t)
{
return t.First().GetAwaiter();
}
Run Code Online (Sandbox Code Playgroud)
但即使IntelliSense说"(等待)mytype[]",编译器在使用时也会出错
mytype[] t = new mytype[] { new mytype(), new mytype() };
await t;
Run Code Online (Sandbox Code Playgroud)
对mytype的单个对象进行调用等待正常.这是为什么?难道我做错了什么?谢谢你的帮助.
我认为这是编译器中的一个错误,您应该报告它。
\n\n我可以验证此代码不起作用(使用Task和TaskAwaiter,而不是自定义类型):
public static TaskAwaiter GetAwaiter(this Task[] tasks)\n{\n return tasks.First().GetAwaiter();\n}\n\nTask[] tasks = \xe2\x80\xa6;\nawait tasks;\nRun Code Online (Sandbox Code Playgroud)\n\n(据报告,它会产生错误“无法等待 \'System.Threading.Tasks.Task[]\'”。)
\n\n但是交换数组IEnumerable(在方法和本地中)确实有效:
public static TaskAwaiter GetAwaiter(this IEnumerable<Task> tasks)\n{\n return tasks.First().GetAwaiter();\n}\n\nIEnumerable<Task> tasks = \xe2\x80\xa6;\nawait tasks;\nRun Code Online (Sandbox Code Playgroud)\n\n有趣的是,在固定版本中,直接等待数组仍然不起作用。但例如等待IList确实有效。