C# 嵌套等待操作在..NET 4.5中失败
我正在尝试开发一个Windows8 Metro风格的应用程序。我得到了以下用例:C# 嵌套等待操作在..NET 4.5中失败,c#,.net-4.5,C#,.net 4.5,我正在尝试开发一个Windows8 Metro风格的应用程序。我得到了以下用例: async void dofileop() { await writedatatofile(); printdata(); } IAsyncAction writedatatofile() { readdatafromfile(); //play with data return FIleIO.WriteData(); } async void readdatafromf
async void dofileop()
{
await writedatatofile();
printdata();
}
IAsyncAction writedatatofile()
{
readdatafromfile();
//play with data
return FIleIO.WriteData();
}
async void readdatafromfile()
{
await FileIO.readdata();
operation1
operation 2
}
在这里执行后等待FileIO.readdata()代码>,控件将立即//播放数据,而不是操作1和操作2。执行printdata()
后,控件将返回到操作1和操作2
如何解决此类问题
根据用例,readdatafromfile()中的所有语句都应该在控件返回WriteDataTable()之前执行
这不是async
方法的工作方式。你可能想读我的书。async
方法在等待未完成的某个操作(例如,FileIO.readdata
)时,将返回调用方
一般来说,让您的async
方法返回Task
,然后在其他async
方法中等待那些Task
,如下所示:
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 WriteDataofile()函数的语法
这只是有点复杂:
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
}
有点混乱,你们能澄清一点吗?我正试图读取文件的内容并搜索特定的字符串。如果找到该字符串,我将修改该字符串并将数据写回文件。根据用例,应在控件返回WriteDataTable()之前执行readdatafromfile()中的所有语句。但实际上,在执行wait FileIO.readdata()之后,我会立即执行wait FileIO.readdata();语句,控件将返回WriteDataTable(),而不执行operation1和operation 2语句。此外,我的约束条件是不更改IAsyncation WriteDataTable()函数的语法。