public async Task <TryResult <string> > TryReadTextFileAsync(string path, CancellationToken cancellationToken)
        {
            var contentStringBuilder = new StringBuilder();
            var operationSucceeded   = await TryReadFileCommonAsync(path, async stream =>
            {
                using (var reader = new StreamReader(stream))
                {
                    var buffer = new char[BufferSize];

                    while (reader.Peek() > 0)
                    {
                        if (cancellationToken.IsCancellationRequested)
                        {
                            return(false);
                        }

                        var charsRead = await reader.ReadAsync(buffer, 0, BufferSize);

                        contentStringBuilder.Append(buffer, 0, charsRead);
                    }
                    return(true);
                };
            }).ConfigureAwait(false);

            return(TryResult.Create(operationSucceeded, operationSucceeded ? contentStringBuilder.ToString() : string.Empty));
        }
        public async Task <TryResult <string> > TryReadTextFileAsync(string path)
        {
            string content            = "";
            bool   operationSucceeded = await TryReadFileCommonAsync(path, async stream => {
                using (var reader = new StreamReader(stream)) {
                    content = await reader.ReadToEndAsync().ConfigureAwait(false);
                    return(true);
                };
            }).ConfigureAwait(false);

            return(TryResult.Create(operationSucceeded, content));
        }
        public async Task <TryResult <byte[]> > TryReadBinaryFileAsync(string path)
        {
            byte[] content            = null;
            bool   operationSucceeded = await TryReadFileCommonAsync(path, async stream => {
                using (var ms = new MemoryStream()) {
                    await stream.CopyToAsync(ms).ConfigureAwait(false);
                    content = ms.ToArray();
                    return(true);
                }
            }).ConfigureAwait(false);

            return(TryResult.Create(operationSucceeded, content));
        }
        public async Task <TryResult <byte[]> > TryReadBinaryFileAsync(string path, CancellationToken cancellationToken)
        {
            byte[] content            = null;
            var    operationSucceeded = await TryReadFileCommonAsync(path, async stream =>
            {
                using (var ms = new MemoryStream())
                {
                    await stream.CopyToAsync(ms, BufferSize, cancellationToken).ConfigureAwait(false);

                    if (cancellationToken.IsCancellationRequested)
                    {
                        return(false);
                    }

                    content = ms.ToArray();
                    return(true);
                }
            }).ConfigureAwait(false);

            return(TryResult.Create(operationSucceeded, content));
        }