Serializuję obiekt do zmiennej json, która przyjmuje wartość {"CurrentBook":null,"Books":[]}. Następnie gdy wywołuję metodę WriteAsync(...) metoda jest wykonywana a zawartość pliku się nie zmienia; nie wyrzuca żadnych wyjątków. Chodzi o metodę async Task Save().

Kolejność wykonywania:

  1. Przy starcie wywoływana jest metoda Load() inicjalizowany jest "configStream" i "configModel"
  2. W pewnym momencie działania programu wywołuję Save()
public class Config : IDisposable, ISubscriber
{
        const FileOptions fileOptions = FileOptions.Asynchronous | FileOptions.SequentialScan;
        const int fileBufferSz = 4096;
        string backupFilePath = Constants.Assets.Files.Config + "~backup";
        
        FileStream configStream;
        JObject configContent;
        AppConfig configModel;
        .
        .
        .
        public async Task Save()
        {
            try
            {
                using (var backupFileStream = new FileStream(
                    backupFilePath, 
                    FileMode.OpenOrCreate, 
                    FileAccess.ReadWrite, 
                    FileShare.Read, 
                    fileBufferSz, 
                    fileOptions))
                {
                    backupFileStream.SetLength(0);//clear old content

                    await CopyStreamAsync(configStream, backupFileStream, 
                        default(CancellationToken), fileBufferSz
                        );
                }

                File.SetAttributes(backupFilePath, FileAttributes.Hidden);

                configStream.SetLength(0);//clear old content

                string json = JsonConvert.SerializeObject(configModel);//json = {"CurrentBook":null,"Books":[]}

                var byteContent = Encoding.UTF8.GetBytes(json);
                await configStream.WriteAsync(byteContent, 0, Encoding.UTF8.GetByteCount(json));// <-- Nie zapisuje wartosci do pliku
            }
#if (DEBUG)
            catch(Exception e)
            {

            }
#else
            //@TODO
#endif
        }

        public async Task Load()
        {
            if (configStream == null)
                OpenFile();

            if (configStream.Length == 0)//is empty?
            {
                configContent = null;
                configModel = new AppConfig();//create empty config model
                return;
            }

            byte[] result = new byte[configStream.Length];

            await configStream.ReadAsync(result, 0, (int)configStream.Length);

            configContent = JObject.Parse(Encoding.UTF8.GetString(result));
            this.configModel = configContent.ToObject<AppConfig>();
        }

        void OpenFile()
        {
            if (File.Exists(backupFilePath))//is backup existing?
            {
                //@TODO
            }

            if (!(File.Exists(Constants.Assets.Files.Config)))
            {
                File.Create(Constants.Assets.Files.Config);//create empty file
            }

            configStream = new FileStream(
                Constants.Assets.Files.Config, 
                FileMode.Open, 
                FileAccess.ReadWrite, 
                FileShare.Read, 
                fileBufferSz,
                fileOptions);
        }
}

AppConfig:

    [Serializable]
    public class AppConfig
    {
        public AppConfig()
        {
            this.CurrentBook = null;
            this.Books = new List<Book.Book>();
        }

        public string CurrentBook;//MD5
        public List<Book.Book> Books;
    }