I had to upgrade one application and put some extra functionality. So i added an async function that handles a .txt file and edit some fields.
So i used this code
StorageFolder storageFolder = ApplicationData.Current.RoamingFolder; storageFile = await storageFolder.CreateFileAsync("file.txt",CreationCollisionOption.ReplaceExisting); await FileIO.AppendTextAsync(storageFile, "saveSomeText");
But i also had a function in MainPage that asynchronously was reading the same file
StorageFolder storageFolder = ApplicationData.Current.RoamingFolder; StorageFile storageFile; storageFile = await storageFolder.CreateFileAsync("file.txt",CreationCollisionOption.OpenIfExists); IList<string> list = await FileIO.ReadLinesAsync(storageFile);
Both functions were async so we could not determine when each function was running and which will be executed first.
So when i tried to run the app i came across with UnauthorizedAccessException because both function maybe were trying to access the file the same time. So i have to make one function wait. You can achieve that by many ways. I used the below function.
async void waitsomething() { await Task.Delay(2000); }
But i want to execute this code only once. So i used localSettings
try { tempstr = App.localSettings.Values["YOURkey"].ToString(); } catch (NullReferenceException exmas) { waitsomething(); }