System.Net.WebConnectionStream.EndRead C# (CSharp) Method

EndRead() public method

public EndRead ( IAsyncResult r ) : int
r IAsyncResult
return int
		public override int EndRead (IAsyncResult r)
		{
			WebAsyncResult result = (WebAsyncResult) r;
			if (result.EndCalled) {
				int xx = result.NBytes;
				return (xx >= 0) ? xx : 0;
			}

			result.EndCalled = true;

			if (!result.IsCompleted) {
				int nbytes = -1;
				try {
					nbytes = cnc.EndRead (request, result);
				} catch (Exception exc) {
					lock (locker) {
						pendingReads--;
						if (pendingReads == 0)
							pending.Set ();
					}

					nextReadCalled = true;
					cnc.Close (true);
					result.SetCompleted (false, exc);
					result.DoCallback ();
					throw;
				}

				if (nbytes < 0) {
					nbytes = 0;
					read_eof = true;
				}

				totalRead += nbytes;
				result.SetCompleted (false, nbytes + result.NBytes);
				result.DoCallback ();
				if (nbytes == 0)
					contentLength = totalRead;
			}

			lock (locker) {
				pendingReads--;
				if (pendingReads == 0)
					pending.Set ();
			}

			if (totalRead >= contentLength && !nextReadCalled)
				ReadAll ();

			int nb = result.NBytes;
			return (nb >= 0) ? nb : 0;
		}