Asynchronous 如何进行铸造操作?
我正在上WinRT IAsyncOperation、async和Wait的速成班。我试图用IAsyncOperation来完成这个任务,但没能想出一个简单的方法来完成这个任务Asynchronous 如何进行铸造操作?,asynchronous,windows-runtime,async-await,Asynchronous,Windows Runtime,Async Await,我正在上WinRT IAsyncOperation、async和Wait的速成班。我试图用IAsyncOperation来完成这个任务,但没能想出一个简单的方法来完成这个任务 public interface IInfo{} public class InfoList : IInfo{} public class Parser { private async Task<InfoList> ParseList() { var returnList = new
public interface IInfo{}
public class InfoList : IInfo{}
public class Parser {
private async Task<InfoList> ParseList() {
var returnList = new InfoList();
HttpClient client = new HttpClient();
Task<string> htmlTask = client.GetStringAsync("http://stackoverflow.com");
string html = await htmlTask;
// parsing logic...
return returnList;
}
public IAsyncOperation<IInfo> Parse()
{
return AsyncInfo.Run(_ =>
Task.Run<IInfo>(async () =>
{
var returnList = await ParseList();
return returnList;
})
);
// I have tried following but causes InvalidCastException
//return (IAsyncOperation<IInfo>)ParseList().AsAsyncOperation<InfoList>();
}
}
公共接口IInfo{}
公共类信息列表:IInfo{}
公共类解析器{
专用异步任务解析列表(){
var returnList=new InfoList();
HttpClient=新的HttpClient();
任务htmlTask=client.GetStringAsync(“http://stackoverflow.com");
字符串html=等待htmlTask;
//分析逻辑。。。
退货清单;
}
公共IAsyncOperation解析()
{
返回AsyncInfo.Run(\u=>
Task.Run(异步()=>
{
var returnList=await ParseList();
退货清单;
})
);
//我试过跟随,但导致无效的例外
//返回(IAsyncOperation)ParseList().asAsAsAsyncOperation();
}
}
类型IAsyncOperation
不是协变的,这意味着您不能将IAsyncOperation
强制转换为IAsyncOperation
尝试让您的ParseList
方法返回一个任务
。IAsyncOperation
类型是不可协变的,这意味着您不能将IAsyncOperation
强制转换为IAsyncOperation
public IAsyncOperation<IInfo> Parse()
{
return AsyncInfo.Run(async _ => (IInfo) await ParseList());
}
尝试让您的ParseList
方法返回一个Task
。公共IAsyncOperation Parse()
public IAsyncOperation<IInfo> Parse()
{
return AsyncInfo.Run(async _ => (IInfo) await ParseList());
}
{
返回AsyncInfo.Run(async=>(IInfo)wait ParseList());
}
或
public IAsyncOperation Parse()
{
返回AsyncInfo.Run(=>ParseList().ContinueWith(t=>(IInfo)t.Result));
}
公共IAsyncOperation解析()
{
返回AsyncInfo.Run(async=>(IInfo)wait ParseList());
}
或
public IAsyncOperation Parse()
{
返回AsyncInfo.Run(=>ParseList().ContinueWith(t=>(IInfo)t.Result));
}
感谢您向我介绍“协变”一词。“接口和委托中泛型类型参数的差异(因为C#4.0)”结论是WinRT给程序员增加了痛苦……但我想坚持使用Task ParseList(),因为我认为返回类型应该更具描述性。实际上,我担心我添加的额外任务.Run async会给我的应用程序增加太多的延迟。谢谢你给我介绍“协变”这个词。“接口和委托中泛型类型参数的差异(因为C#4.0)”结论是WinRT给程序员增加了痛苦……但我想坚持使用Task ParseList(),因为我认为返回类型应该更具描述性。实际上,我担心我添加的额外任务.Run async会给我的应用程序增加太多延迟。maxim pg。你太棒了。maxim pg。你太棒了。