2012-08-30 45 views
1

我想开发一个Windows 8 Metro风格的应用程序。我有以下使用情况:执行await FileIO.readdata();嵌套等待操作失败.. NET 4.5

async void dofileop() 
{ 
    await writedatatofile();   
    printdata(); 
} 

IAsyncAction writedatatofile() 
{ 
    readdatafromfile(); 
    //play with data 
    return FIleIO.WriteData(); 
} 

async void readdatafromfile() 
{ 
    await FileIO.readdata(); 
    operation1 
    operation 2 
} 

这里,控制立即要与数据,而不是operation1和操作2至//播放。在执行printdata()后,控制回到操作1和操作2。

我该如何解决这类问题?

+0

相当混乱,你可以澄清一点? – VIRA

+0

我正在尝试读取文件的内容并搜索特定的字符串。如果找到字符串,我将修改该字符串并将数据写回文件。 – Suman

+0

请问您的问题? – VIRA

回答

2

根据用例,readdatafromfile()中的所有语句应在控制回到writedatatofile()之前执行。

这不是async方法的工作方式。您可能需要阅读我的async/await intro。当await某些未完成的操作(例如,FileIO.readdata)时,async方法将返回到其调用者。

作为一般规则,有你async方法返回Task,然后await那些Task S IN其他async方法,像这样:

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 
}