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

本文关键字:数组 扩展 方法 实现 等待 | 更新日期: 2023-09-27 17:50:51

我想通过实现一个扩展方法

使一个数组可等待
public static IAwaitable GetAwaiter(this mytype[] t)
{
    return t.First().GetAwaiter();
}

但是即使智能感知说"(可等待)mytype[]",当使用

时,编译器给了我一个错误
mytype[] t = new mytype[] { new mytype(), new mytype() };
await t;

在单个mytype对象上调用await可以正常工作。为什么呢?我做错了什么吗?谢谢你的帮助。

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

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

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

public static TaskAwaiter GetAwaiter(this Task[] tasks)
{
    return tasks.First().GetAwaiter();
}
Task[] tasks = …;
await tasks;

(它产生错误"Cannot await " System.Threading.Tasks。任务[]",如报告。

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

public static TaskAwaiter GetAwaiter(this IEnumerable<Task> tasks)
{
    return tasks.First().GetAwaiter();
}
IEnumerable<Task> tasks = …;
await tasks;
有趣的是,在固定版本中,直接等待数组仍然不起作用。但是,例如等待IList的工作