private static void FinishDownload(DotNetUrlDownloader.DownloadState state)
        {
            if (!state.downloadResult.succeeded && state.numRetriesLeft > 0)
            {
                state.numRetriesLeft--;
                DotNetUrlDownloader.Download(state);
                return;
            }
            List <DotNetUrlDownloader.DownloadResult> completedDownloads = state.downloader.m_completedDownloads;

            lock (completedDownloads)
            {
                state.downloader.m_completedDownloads.Add(state.downloadResult);
            }
        }
        public void Download(string url, UrlDownloadCompletedCallback cb, UrlDownloaderConfig config)
        {
            WebRequest request = WebRequest.Create(url);

            DotNetUrlDownloader.DownloadResult downloadResult = new DotNetUrlDownloader.DownloadResult();
            downloadResult.callback = cb;
            DotNetUrlDownloader.Download(new DotNetUrlDownloader.DownloadState
            {
                downloader     = this,
                host           = url,
                downloadResult = downloadResult,
                request        = request,
                numRetriesLeft = config.numRetries,
                timeoutMs      = config.timeoutMs
            });
        }