public override void EndWrite(IAsyncResult asyncResult) {
#if DEBUG
using (GlobalLog.SetThreadKind(ThreadKinds.User)) {
#endif
GlobalLog.Enter("ConnectStream#" + ValidationHelper.HashString(this) + "::EndWrite");
if(Logging.On)Logging.Enter(Logging.Web, this, "EndWrite", "");
//
// parameter validation
//
if (asyncResult==null) {
throw new ArgumentNullException("asyncResult");
}
LazyAsyncResult castedAsyncResult = asyncResult as LazyAsyncResult;
if (castedAsyncResult==null || castedAsyncResult.AsyncObject!=this) {
throw new ArgumentException(SR.GetString(SR.net_io_invalidasyncresult), "asyncResult");
}
if (castedAsyncResult.EndCalled) {
throw new InvalidOperationException(SR.GetString(SR.net_io_invalidendcall, "EndWrite"));
}
castedAsyncResult.EndCalled = true;
//
// wait & then check for errors
//
object returnValue = castedAsyncResult.InternalWaitForCompletion();
if (ErrorInStream) {
GlobalLog.LeaveException("ConnectStream#" + ValidationHelper.HashString(this) + "::EndWrite", m_ErrorException);
throw m_ErrorException;
}
Exception exception = returnValue as Exception;
if (exception!=null) {
if (exception is IOException && m_Request.Aborted) {
GlobalLog.Print("ConnectStream#" + ValidationHelper.HashString(this) + "::InternalWrite() throwing");
throw new WebException(
NetRes.GetWebStatusString("net_requestaborted", WebExceptionStatus.RequestCanceled),
WebExceptionStatus.RequestCanceled);
}
IOError(exception);
GlobalLog.LeaveException("ConnectStream#" + ValidationHelper.HashString(this) + "::EndWrite", exception);
throw exception;
}
GlobalLog.Leave("ConnectStream#" + ValidationHelper.HashString(this) + "::EndWrite");
if(Logging.On)Logging.Exit(Logging.Web, this, "EndWrite", "");
#if DEBUG
}
#endif
}