无法等待';Model.PersonalInfo';
本文关键字:PersonalInfo Model 等待 | 更新日期: 2023-09-27 18:20:34
我在DesignDataService类中有以下方法
public async Task<T> GetData<T>(T dataObject)
{
var typeName = typeof(T).Name;
switch (typeName)
{
case "PersonalInfo":
var person = new PersonalInfo
{
FirstName = "Mickey",
LastName = "Mouse" ,
Adres = new Address{Country="DLRP"} ,
};
return await person;
} // end Switch
} // GetData<T>
如何从DataService返回新的PersonalInfo类?
目前我收到错误无法等待"Model.PersonalInfo"
即使我将return语句更改为,也会将等待人员返回为Task错误保持相同的
即使此函数返回Task
,也不需要使用async
关键字。
在这里,您可以简单地使用Task.FromResult
public Task<T> GetData<T>(T dataObject) where T : MyKnownBaseObject
{
var typeName = typeof(T).Name;
switch (typeName)
{
case "PersonalInfo":
var person = new PersonalInfo
{
FirstName = "Mickey",
LastName = "Mouse" ,
Adres = new Address{Country="DLRP"} ,
};
return Task.FromResult<T>(person);
break;
default:
return Task.FromResult<T>(default(T));
} // end Switch
} // GetData<T>
这不会将工作委派给另一个线程。如果你有少量的工作不适合parralellism,但你仍然必须强制方法返回一个与其他方法兼容的任务,那么这种技术就可以了。
您将两种东西混合在一起。您用async
注释一个方法,以指示编译器您希望能够(在Task中)await
异步操作。
另一方面,返回值是Task
。您可以将两者混合使用,但在您的情况下(async Task<T>
),这意味着您正在返回一个操作的异步承诺,但您也要在方法中等待一个的结果,这肯定不是您想要的。
如果PersonalInfo
的创建预计需要很长时间,则需要将对象的创建添加到Task中并等待。
您的方法似乎没有类型限制,因此要返回PersonalInfo
,您必须从object
转换为T
。
示例:
public async Task<T> GetData<T>(T dataObject)
{
var typeName = typeof(T).Name;
switch (typeName)
{
case "PersonalInfo":
return await Task<T>.Factory.StartNew(() =>
{
return (T)(object)new PersonalInfo
{
FirstName = "Mickey",
LastName = "Mouse",
Adres = new Address { Country = "DLRP" },
};
});
}
return default(T);
}