Ejemplo n.º 1
0
        async Task RebuildCacheAsync(Dictionary <string, FileFingerprint> blobs, CancellationToken cancellationToken)
        {
            FileInfo tempFileInfo = null;
            var      allOk        = false;

            try
            {
                await CloseWriterAsync().ConfigureAwait(false);

                if (blobs.Count > 0)
                {
                    do
                    {
                        var tempFileName = Path.GetRandomFileName();

                        tempFileName = Path.Combine(MsgPackDirectory.FullName, tempFileName);

                        tempFileInfo = new FileInfo(tempFileName);
                    } while (tempFileInfo.Exists);

                    OpenWriter(tempFileInfo);

                    await StoreBlobsImplAsync(blobs.Values, cancellationToken).ConfigureAwait(false);

                    await CloseWriterAsync().ConfigureAwait(false);
                }

                allOk = true;
            }
            catch (OperationCanceledException)
            { }
            catch (Exception ex)
            {
                Console.WriteLine("Unable to truncate corrupt file: " + ex.Message);
            }

            if (allOk)
            {
                foreach (var file in _fileSequence.Files)
                {
                    file.Delete();
                }

                _fileSequence.Rescan();

                tempFileInfo?.MoveTo(_fileSequence.NewFile().FullName);

                _fileSequence.Rescan();
            }
            else
            {
                tempFileInfo?.Delete();
            }
        }