【发布时间】:2017-05-31 19:01:58
【问题描述】:
如下定义的方法不能返回任何内容。那么如何搭配 进入这种方法必须返回“任务”的正常语法。 因此,当“async”被移除时,下面的方法将无法编译。
static async Task MyAsyncMethod() { }
当你调用方法时:
await MyAsyncMethod();
"await" 应该在可等待对象上调用,但这里返回 类型是“struct Void”,这是不可等待的
【问题讨论】:
-
如果 async 被移除,如果你实际返回一个任务,它将编译。并不是说我建议在大多数情况下这样做。无论如何,你的实际问题是什么?我在您的标题中看到一个问号,但不是实际问题。只是一个观察。
-
您返回一个
Task,因为这是运行时可以确定异步操作何时完成的方式。如果你简单地将它标记为void,虽然它会编译,但它会被视为“一劳永逸”,在执行一些其他逻辑之前,你无法等待该任务完成。 Fire and forget 语义保留给事件处理程序(例如按钮点击)。 -
重点是语法一致性。当语法说返回“任务”但实际上它取决于其他修饰符时,我们需要解释它
-
您的实际问题是什么?
-
async不符合正常语法,它将返回值提升为Task<T>用于返回值的方法,或Task用于 void 方法。async方法也可以返回void在这种情况下创建的Task不会返回给调用者并且无法观察到。
标签: c#