這段代碼一直拋出一個stackoverflow exception
,我有一種感覺是因爲await
關鍵字導致堆棧填滿或線程可用性問題。但是,我不確定補救這種情況的最佳方式是什麼。循環運行異步方法沒有Stackoverflow異常
的results
變量只是一個StorageFiles
集合,如果它上面的1020左右,拋出異常;否則它的通常罰款。
private async void GetMusicTest()
{
var sfolder = await StorageFolder.GetFolderFromPathAsync(dir);
var query = sfolder.CreateFileQueryWithOptions(queryOptions);
var results = await query.GetFilesAsync();
for (int i = 0; i < results.Count; i++)
{
MusicProperties mp = await results[i].Properties.GetMusicPropertiesAsync();
Debug.WriteLine(mp.Title);
}
}
此代碼在控制檯應用程序中正常工作,但在桌面WinForm應用程序中使用時會引發錯誤。有趣的是,如果使用result.Count()
代替,則錯誤在三次迭代後拋出,而results.Count
在遍歷至少一半集合(如果不是全部的話)(似乎變化)之後拋出它。他們都返回相同的值。什麼是最好的循環方式,而不會導致stackoverflow異常或用盡所有可用的線程?
看來這裏確實沒有足夠的代碼。沒有跡象表明你正在使用遞歸或其他任何會佔用堆棧空間的東西,所以問題可能包括其他代碼段。 – Servy
我更新了代碼,但我並不認爲這些代碼會特別相關。除填充一些變量的構造函數之外,這是該類中唯一的其他方法。這是一個實例化並從'Winform'中調用的類。此人有類似的問題http://social.msdn.microsoft.com/Forums/en-AU/winappswithcsharp/thread/6b84fa0b-f873-43a2-b2ec-e930f95d1d8f – keyboardP
爲什麼不發佈實際的異常呢? – sooniln