私は単純な地下鉄アプリを書いています。ただし、ファイルにアクセスすると API がブロックされます。ブロックするとは、プログラムが永遠に待機することを意味します。ファイルまたはフォルダーの作成/開くには、最大で数秒かかります。この場合、それは永遠にかかります。
プログラムを実行すると、OnTest から戻ってきません。それはあなたが得るものですか。了解しました。ファイルとフォルダの作成が完了するまで待機します。多分それは素晴らしいデザインではありません。しかし、それは問題ではありません。
私の質問は:
- 同じ動作をしますか (プログラムを永久にブロックします)
- それは起こるべきことですか、それとも WinRT のバグですか? (私は消費者向けプレビューを使用しています)
- それが期待される動作である場合、なぜ永遠にかかるのでしょうか?
XAML コードは次のとおりです。
<Button Click="OnTest">Test</Button>
C# コードは次のとおりです。
private async void OnTest(object sender, RoutedEventArgs e)
{
var t = new Cache("test1");
t = new Cache("test2");
t = new Cache("test3");
}
class Cache
{
public Cache(string name)
{
TestRetrieve(name).Wait();
}
public static async Task TestRetrieve(string name)
{
StorageFolder rootFolder = ApplicationData.Current.LocalFolder;
var _folder = await rootFolder.CreateFolderAsync(name, CreationCollisionOption.OpenIfExists);
var file = await _folder.CreateFileAsync("test.xml", CreationCollisionOption.OpenIfExists);
}
}
new Cache("test2"); への 2 回目の呼び出しでブロックされます。