我正在尝试开发Windows 8 Metro风格的应用程序。我有以下用例:
async void dofileop()
{
await writedatatofile();
printdata();
}
IAsyncAction writedatatofile()
{
readdatafromfile();
//play with data
return FIleIO.WriteData();
}
async void readdatafromfile()
{
await FileIO.readdata();
operation1
operation 2
}
执行await FileIO.readdata();
后,控件立即//使用数据而不是operation1和operation2。执行printdata()
后,控件将返回operation1和operation2。
如何解决这些问题?
答案 0 :(得分:2)
根据用例,readdatafromfile()中的所有语句都应该在控制返回到writedatatofile()之前执行。
这不是async
方法的工作方式。您可能想要阅读我的async
/await
intro。 async
方法在await
某些未完成的操作(例如FileIO.readdata
)时将返回其调用者。
作为一般规则,让您的async
方法返回Task
,然后await
使用其他Task
方法中的async
,如下所示:< / p>
async Task dofileop()
{
await writedatatofile();
printdata();
}
async Task writedatatofile()
{
await readdatafromfile();
//play with data
await FIleIO.WriteData();
}
async Task readdatafromfile()
{
await FileIO.readdata();
operation1
operation 2
}
另外,我的约束不是改变IAsyncAction writedatatofile()函数的语法。
这有点令人费解:
async Task dofileop()
{
await writedatatofileAsync();
printdata();
}
IAsyncAction writedatatofile()
{
return writedatatofileAsync().AsAsyncAction();
}
async Task writedatatofileAsync()
{
await readdatafromfile();
//play with data
await FIleIO.WriteData();
}
async Task readdatafromfile()
{
await FileIO.readdata();
operation1
operation 2
}