private Task <string> GetChecksumAsync(AdapterHolder adapterHolder, string key, CancellationToken cancellationToken) { if (key == null) { throw new ArgumentNullException(nameof(key)); } return(GetChecksumAsyncImpl()); async Task <string> GetChecksumAsyncImpl() { var adapter = await adapterHolder.GetAdapterAsync(); await ThrowIfNotExistsAsync(adapter, key, cancellationToken); if (adapter is IChecksumCalculator checksumCalculator) { return(await checksumCalculator.GetChecksumAsync(key, cancellationToken)); } var bytes = await ReadAllBytesAsync(adapter, key, cancellationToken); return(ChecksumHelper.FromContent(bytes)); } }