異なるスレッドで Windows.Storage.StorageFolder.GetFolderFromPathAsync への複数の呼び出しがあると、ArgumentExceptions が発生します。問題を再現するテストを次に示します。
[TestMethod]
public async Task ConcurrentGetFolderFromPath()
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < 10; i++)
{
var task = Task.Run(async () =>
{
string localFolderPath = Windows.Storage.ApplicationData.Current.LocalFolder.Path;
//await Task.Yield();
var folder = await Windows.Storage.StorageFolder.GetFolderFromPathAsync(localFolderPath);
});
tasks.Add(task);
}
await Task.WhenAll(tasks);
}
これが私が得る例外です:
System.ArgumentException: Value does not fall within the expected range.
Result StackTrace:
at Windows.Storage.StorageFolder.GetFolderFromPathAsync(String path)
at PCLStorage.Test.FolderTests.<<ConcurrentGetFolderFromPath>b__53>d__55.MoveNext() in c:\git\pclstorage\test\PCLStorage.Test\FolderTests.cs:line 205
このテストは、単独で実行すると一貫して失敗しますが、残りのPCL Storageテストと一緒に実行すると、通常は合格します。
ここで何か間違ったことをしていますか?GetFolderFromPathAsync または私が使用している他の API は、UI スレッドからのみ使用することになっていますか? それとも、これは WinRT ストレージ API のバグでしょうか?