C# 等待数组;通过实现数组的扩展方法
我想通过实现一个扩展方法使数组成为可等待的C# 等待数组;通过实现数组的扩展方法,c#,async-await,C#,Async Await,我想通过实现一个扩展方法使数组成为可等待的 public static IAwaitable GetAwaiter(this mytype[] t) { return t.First().GetAwaiter(); } 但即使IntelliSense说“(等待)mytype[]”,编译器在使用 mytype[] t = new mytype[] { new mytype(), new mytype() }; await t; 在mytype的单个对象上调用wait效果很好。为什么呢?
public static IAwaitable GetAwaiter(this mytype[] t)
{
return t.First().GetAwaiter();
}
但即使IntelliSense说“(等待)mytype[]
”,编译器在使用
mytype[] t = new mytype[] { new mytype(), new mytype() };
await t;
在mytype的单个对象上调用wait效果很好。为什么呢?我做错什么了吗?谢谢您的帮助。我认为这是编译器中的一个错误,您应该这样做 我可以验证此代码是否无效(使用
任务
和任务等待者
,而不是自定义类型):
(如报告所述,它会产生错误“无法等待”System.Threading.Tasks.Task[]”。)
但是将数组替换为IEnumerable
(在方法和本地中)确实有效:
public static TaskAwaiter GetAwaiter(this IEnumerable<Task> tasks)
{
return tasks.First().GetAwaiter();
}
IEnumerable<Task> tasks = …;
await tasks;
publicstatictaskawaiter-getwaiter(此IEnumerabletasks)
{
返回任务。First().GetAwaiter();
}
IEnumerable tasks=…;
等待任务;
有趣的是,对于固定版本,直接等待数组仍然不起作用。但是,例如waiting
IList
确实有效。waiting用于异步调用,为什么要将其用于类型?会出现什么错误?顺便说一句:使用似乎比自己实现一个可等待的类要好:不幸的是,错误消息只是“无法等待'mytyope[]”。谢谢你给我指出TaskCompletionSource
,但有一些特殊要求…@prthrokz他可能会遵循。我听从了你的建议并报告了(请参阅)。谢谢你的调查工作。
public static TaskAwaiter GetAwaiter(this IEnumerable<Task> tasks)
{
return tasks.First().GetAwaiter();
}
IEnumerable<Task> tasks = …;
await tasks;