5

我想通过实现一个扩展方法使一个数组可以等待

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 可以正常工作。这是为什么?难道我做错了什么?谢谢你的帮助。

4

1 回答 1

3

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

我可以验证此代码不起作用(使用Taskand 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确实有效。

于 2013-01-07T15:44:52.203 回答