等待数组; 通过实现数组的扩展方法

Dav*_*vid 5 c# async-await

我想通过实现扩展方法使数组等待

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的单个对象进行调用等待正常.这是为什么?难道我做错了什么?谢谢你的帮助.

svi*_*ick 3

我认为这是编译器中的一个错误,您应该报告它

\n\n

我可以验证此代码不起作用(使用TaskTaskAwaiter,而不是自定义类型):

\n\n
public static TaskAwaiter GetAwaiter(this Task[] tasks)\n{\n    return tasks.First().GetAwaiter();\n}\n\nTask[] tasks = \xe2\x80\xa6;\nawait tasks;\n
Run Code Online (Sandbox Code Playgroud)\n\n

(据报告,它会产生错误“无法等待 \'System.Threading.Tasks.Task[]\'”。)

\n\n

但是交换数组IEnumerable(在方法和本地中)确实有效:

\n\n
public static TaskAwaiter GetAwaiter(this IEnumerable<Task> tasks)\n{\n    return tasks.First().GetAwaiter();\n}\n\nIEnumerable<Task> tasks = \xe2\x80\xa6;\nawait tasks;\n
Run Code Online (Sandbox Code Playgroud)\n\n

有趣的是,在固定版本中,直接等待数组仍然不起作用。但例如等待IList确实有效。

\n