private async Task<Errorable<Stage>> persistStage(Stage stg) { FileInfo tmpFile = system.getTemporaryFile(); using (var fs = new FileStream(tmpFile.FullName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, bufferSize: 16386, useAsync: true)) { await fs.WriteRawAsync(stg.WriteTo(new StringBuilder()).ToString()); } lock (FileSystem.SystemLock) { FileInfo fi = system.getStagePathByStageName(stg.Name); if (fi.Exists) fi.Delete(); // Create directory if it doesn't exist: if (!fi.Directory.Exists) { Debug.WriteLine(String.Format("New DIR '{0}'", fi.Directory.FullName)); fi.Directory.Create(); } // Write the contents to the file: Debug.WriteLine(String.Format("New STAGE '{0}'", fi.FullName)); File.Move(tmpFile.FullName, fi.FullName); } return stg; }