C# - Task.FromResult会受到重罚吗?

时间:2016-02-08 19:24:30

标签: c# asynchronous

我对使用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))); } 但我无法改变的事情?

1 个答案:

答案 0 :(得分:3)

而不是创建Task,然后在该任务中添加一个延续,但是将其包装在相同的Task中,只需返回您创建的第一个任务

由于您没有await,因此没有理由将该方法标记为async

考虑FromResult的性能成本是毫无意义的讨论。您需要根据您拥有的结果创建任务,以便完成工作。考虑到它的价格是多么的无关紧要,因为你没有其他选择。如果您认为可以编写一个性能优于Microsoft版本的方法,则可以尝试创建自己的FromResult方法。

那就是说,不,手术并不是特别昂贵。