【问题标题】:Trying to Understand Why This Works / async return试图理解为什么会这样/异步返回
【发布时间】:2013-11-13 16:41:52
【问题描述】:

我正在创建一个 ASP.NET WebAPI 2 控制器。它有效,但我很困惑为什么。看来我要返回 List<..> 而不是 Task

请向我解释为什么返回列表是正确的。

public class AttendeePriceController : ApiController
{
    // GET api/<controller>
    public async Task<List<AttendeePrice>> Get()
    {
        List<AttendeePrice> attendeesPriceList;
        using (var db = new MyContext())
        {
            attendeesPriceList = await db.AttendeePrices.ToListAsync();
        }
        return attendeesPriceList;
    }

【问题讨论】:

    标签: c# asp.net-web-api async-await


    【解决方案1】:

    async 关键字将您的方法转换为状态机。该转换的一部分是生成一个代表该方法的Task。当您“返回”一个值时,状态机会使用该值完成该任务。

    有关详细信息,请参阅我的async intro 或MSDN docs。

    【讨论】:

    • 谢谢斯蒂芬,文档确实提到你可以像我一样返回一个原语,然后继续说“它有点奇怪”,我没有遵循。我是否通过直接返回列表来否定异步?你能建议一个更好的方法来返回任务吗?很抱歉没有完全理解(即使在多次阅读文档之后)
    • 这很奇怪,因为您的代码返回类型为 T,但方法签名的返回类型为 Task&lt;T&gt;。你做得对。
    • 这就是我发帖的原因。代码按我的意愿编译和运行,但不是我期望的那样。我想将异步包装为返回的一部分(这可能是错误的想法)。我的返回需要在 JSON 的第二级有数据,所以我不能只返回 EF 给我的。
    • 我完全不理解你。
    • @PeterKellner:我仍然不清楚 JSON/EF 评论;如果此答案不充分,请随时发表后续评论或其他问题。我确实有一个较旧的unofficial async keyword FAQ 试图解释为什么 async/await 语法的设计方式是这样的;这可能会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-07-29
    • 2012-09-25
    • 1970-01-01
    • 2011-05-09
    • 2013-08-09
    • 2015-08-18
    • 2020-01-07
    相关资源
    最近更新 更多