2012-08-30 44 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 
}