C# 无法隐式转换';System.Threading.Tasks.Task<;系统.集合.通用.列表>;至';System.Collections.Generic.List<&燃气轮机;
我对现有的一些方法进行了异步处理,现在在调用这些方法的属性中,我看到了错误: 无法隐式转换 'System.Threading.Tasks.Task 至“System.Collections.Generic.List>C# 无法隐式转换';System.Threading.Tasks.Task<;系统.集合.通用.列表>;至';System.Collections.Generic.List<&燃气轮机;,c#,asynchronous,async-await,task,C#,Asynchronous,Async Await,Task,我对现有的一些方法进行了异步处理,现在在调用这些方法的属性中,我看到了错误: 无法隐式转换 'System.Threading.Tasks.Task 至“System.Collections.Generic.List> 公共列表用户属性 { 得到 { if(userProperties==null) { userProperties=GetUserProperties(UserId); } } } 专用异步任务GetUserProperties(int userId) { var result=
公共列表用户属性
{
得到
{
if(userProperties==null)
{
userProperties=GetUserProperties(UserId);
}
}
}
专用异步任务GetUserProperties(int userId)
{
var result=await UserDAL.GetUserProperties(userid);
返回结果;
}
“GetuserProperties”是一种异步方法,返回一个(可等待的)任务。如果您需要该任务中的计算结果,有两种可能性:
userProperties=GetUserProperties(UserId)代码>
userProperties=await-GetUserProperties(UserId)代码>。但是,在属性设置器中不允许这样做(不能是异步的)。看
如果您这样做,我认为最好将UserProperties设置为异步方法,并完全放弃该属性。您不会等待
异步方法的结果。在这种情况下,您可能必须同步执行此操作,例如:通过使用任务的.Result
属性,请在将来正确格式化代码。嗨,Johan,在我的情况下,我无法直接调用GetUserProperties(UserId),因为我的是MVC视图,我只能从MVC视图访问属性。。还有其他选择吗?如果你想同步获取UserProperties//你是指异步获取,因为我想异步运行它吗?@Claudia:这是一个输入错误。我更正了。@Claudia您可以考虑一种机制,在视图刷新自身(访问存储的属性)之前,先异步获取UserProperties,然后将其存储在属性中。
public List<Property> UserProperties
{
get
{
if (userProperties == null)
{
userProperties = GetUserProperties(UserId);
}
}
}
private async Task<List<Property>> GetUserProperties(int userId)
{
var result = await UserDAL.GetUserProperties(userid);
return result;
}