1

このコードはスローを続けていますが、これはキーワードが原因でスタックがいっぱいになるか、スレッドの可用性の問題が原因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 を使用すると、3 回の反復後にエラーがスローされますがresults.Count、コレクションのすべてではないにしても、少なくとも半分を反復した後にスローされます (異なるようです)。どちらも同じ値を返します。stackoverflow 例外を発生させたり、使用可能なすべてのスレッドを使い果たしたりせずにループする最良の方法は何ですか?

4

1 に答える 1

2

これは対処すべきバグだと思います。

私が正しければawait Task.Yield()、ループ内で時々実行することで回避できます。

于 2012-11-08T21:56:10.403 に答える