这段代码一直抛出 a stackoverflow exception
,我感觉要么是因为await
关键字导致堆栈填满,要么是线程可用性问题。但是,我不确定解决此问题的最佳方法是什么。
该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()
使用 if 代替,则在三次迭代后抛出错误,而results.Count
在迭代至少一半集合(如果不是全部的话)后抛出它(它似乎有所不同)。它们都返回相同的值。在不导致 stackoverflow 异常或用完所有可用线程的情况下循环遍历的最佳方法是什么?