我对使用async
的{{1}}编码有点新,并且遇到了一些我需要实现的方法(来自接口或部分继承服务,或者只是建议默认约定)标记为C#
,并期望async
返回。
但我并不总是有异步代码来运行;我并不总是需要Task<T>
运算符。
因此,我的临时解决方法是将await
返回到这些方法,例如......
await Task.FromResult({normal code});
这确实解决了编译时错误,但我想知道这样做是否存在继承问题。如果是这样,有什么方法可以解决标记为public async Task<JsonResult> Id() {
// if the user is not authenticated, simply return false
if (!User.Identity.IsAuthenticated || String.IsNullOrEmpty(User.Identity.Name))
return await Task.FromResult(Json(false));
return await Task.FromResult((Json(User?.FindFirst("users/id")?.Value ?? null)));
}
但我无法改变的事情?
答案 0 :(得分:3)
而不是创建Task
,然后在该任务中添加一个延续,但是将其包装在相同的Task
中,只需返回您创建的第一个任务
由于您没有await
,因此没有理由将该方法标记为async
。
考虑FromResult
的性能成本是毫无意义的讨论。您需要根据您拥有的结果创建任务,以便完成工作。考虑到它的价格是多么的无关紧要,因为你没有其他选择。如果您认为可以编写一个性能优于Microsoft版本的方法,则可以尝试创建自己的FromResult
方法。
那就是说,不,手术并不是特别昂贵。