private bool TryGetUrlWithNoTimeValidation(out BaseUrlInfo item, string url, int millisecondsTimeout, CancellationToken cancellationToken) { this.CheckDisposed(); item = null; if (cancellationToken.IsCancellationRequested) { throw new OperationCanceledException("The operation was canceled.", cancellationToken); } var cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, this._blockinQueueCancellationTokenSource.Token); try { if (millisecondsTimeout != 0) { cancellationTokenSource.CancelAfter(millisecondsTimeout); while (true) { if (cancellationTokenSource.IsCancellationRequested) { throw new OperationCanceledException("The operation was canceled.", cancellationTokenSource.Token); } var buffer = _webClient.DownloadString(url); var urlCount = Extract(buffer).Count(); item = new BaseUrlInfo() { Url = url, UrlCount = urlCount }; return(true); } } } catch (OperationCanceledException ex) { if (cancellationToken.IsCancellationRequested) { throw new OperationCanceledException("The operation was canceled.", ex); } return(false); } finally { cancellationTokenSource.Dispose(); } try { cancellationToken.ThrowIfCancellationRequested(); var buffer = _webClient.DownloadString(url); var urlCount = Extract(buffer).Count(); item = new BaseUrlInfo() { Url = url, UrlCount = urlCount }; return(true); } catch (OperationCanceledException ex) { throw new OperationCanceledException("The operation was canceled.", ex); } }
public bool TryGetUrl(out BaseUrlInfo item, string url, int millisecondsTimeOut, CancellationToken cancellationToken) { LinkExtractor.ValidateMillisecondsTimeout(millisecondsTimeOut); return(this.TryGetUrlWithNoTimeValidation(out item, url, millisecondsTimeOut, cancellationToken)); }