从方法返回通用任务

时间:2014-02-28 12:31:31

标签: c# async-await

我正在尝试在公共IUserStore接口中实现以下方法,因为我正在使用自定义身份验证:

public Task<User> FindByIdAsync(string userId)
{
    var user = UserRetriever.GetUser(userId);
    return ???;
}

UserRetriever工作正常,并获取我的User对象,但我该如何返回?

如果我试试这个:

return await user;

我被告知我的用户对象“不等待”。我是否可以在用户上实现一个界面以使其等待?

或者是否有一个可以让用户进入的等待容器,从这个方法返回它?

1 个答案:

答案 0 :(得分:2)

您可以使用FromResult

return Task.FromResult(user);

请注意,这仅存在于.Net 4.5中,并且FindByIdAsync方法的任何用户都希望异步进行提取,这是您当前实现所不能做到的。

您可以创建一个任务来执行检索:

return Task.Run(() => UserRetriever.GetUser(userId));

虽然这仍然存在阻塞问题。