/// <summary>
        /// Writes data from one stream to another using block-by-block algorithm.
        /// </summary>
        /// <param name="source"></param>
        /// <param name="destination"></param>
        public void Write(Stream source, Stream destination)
        {
            this.source      = source;
            this.destination = destination;

            segmentId = 0;

            parallelProcessor.Process(() => DoBlockByBlockWriting(), configuration.ThreadsCount);

            while (!parallelProcessor.ProcessingFinished())
            {
                ;
            }
        }