从方法返回通用任务时的转换错误

时间:2015-03-08 18:45:52

标签: c# azure generics async-await task

我已经创建了一种从Azure移动服务上的查询返回任务的方法。 但是当我为方法设置返回类型时,即Task我得到这些错误指向方法的返回部分:

我试图通过使用通用的ILI来解决这个问题,但似乎这不能用于异步方法。

有没有人知道如何更正此方法中的返回类型错误?

http://hastebin.com/ziwovovabe.tex

public async static Task<Item> QueryTable()
{
    var table = App.MobileService.GetTable<Item>();
    IMobileServiceTableQuery<Item> query = table.
        OrderBy(item => item.Id);

    Task<Item> items = new Task<Item>();
    items = await query.ToListAsync();

    return items;
}

2 个答案:

答案 0 :(得分:3)

该方法返回Task<Item>,但该方法的异步性质为您处理Task<>部分。您的代码应该只返回Item。也许这样的事情?:

public async static Task<Item> QueryTable()
{
    var table = App.MobileService.GetTable<Item>();
    IMobileServiceTableQuery<Item> query = table.
        OrderBy(item => item.Id);

    return await query.ToListAsync();
}

但是,ToListAsync()表示这将返回项目的集合,而不是单个项目。您想要从该系列中返回特定商品吗?像这样的东西?:

return await query.ToListAsync().Single(i => i.SomeProperty == someValue);

或许你真的想要归还这个系列?在这种情况下,返回类型可能是集合类型。像这样:

public async static Task<IList<Item>> QueryTable()
{
    // ...
}

关键是await关键字为您创建Task<>,您需要做的就是在Task<>内返回类型。

答案 1 :(得分:2)

此:

await query.ToListAsync();
return items;

尝试返回Task<List<Item>>,而您的返回类型为Task<Item>。目前,您的查询返回一个集合,而不是单个项目。它目前的实施方式,返回类型应为Task<List<Item>>

public async static Task<List<Item>> QueryTable()
{
    var table = App.MobileService.GetTable<Item>();
    IMobileServiceTableQuery<Item> query = table.
        OrderBy(item => item.Id);

    return await query.ToListAsync();
}