예제 #1
0
		public static void RunWithLock (object locker, Func<SimpleAsyncResult, bool> func, SimpleAsyncCallback callback)
		{
			Run (inner => {
				bool running = func (inner);
				if (running)
					Monitor.Exit (locker);
				return running;
			}, inner => {
				if (inner.GotException) {
					if (inner.synch)
						Monitor.Exit (locker);
					callback (inner);
					return;
				}

				try {
					if (!inner.synch)
						Monitor.Enter (locker);

					callback (inner);
				} finally {
					Monitor.Exit (locker);
				}
			});
		}
예제 #2
0
		public static SimpleAsyncResult RunWithLock (object locker, SimpleAsyncFunc func, SimpleAsyncCallback callback)
		{
			return Run (inner => {
				bool running = func (inner);
				if (running)
					Monitor.Exit (locker);
				return running;
			}, inner => {
				if (inner.GotException) {
					if (inner.CompletedSynchronously)
						Monitor.Exit (locker);
					callback (inner);
					return;
				}

				try {
					if (!inner.CompletedSynchronously)
						Monitor.Enter (locker);

					callback (inner);
				} finally {
					Monitor.Exit (locker);
				}
			});
		}
예제 #3
0
        public static void RunWithLock(object locker, SimpleAsyncFunc func, SimpleAsyncCallback callback)
        {
            Run(inner => {
                bool running = func(inner);
                if (running)
                {
                    Monitor.Exit(locker);
                }
                return(running);
            }, inner => {
                if (inner.GotException)
                {
                    if (inner.CompletedSynchronously)
                    {
                        Monitor.Exit(locker);
                    }
                    callback(inner);
                    return;
                }

                try {
                    if (!inner.CompletedSynchronously)
                    {
                        Monitor.Enter(locker);
                    }

                    callback(inner);
                } finally {
                    Monitor.Exit(locker);
                }
            });
        }
예제 #4
0
		protected SimpleAsyncResult (AsyncCallback cb, object state)
		{
			this.state = state;
			this.cb = result => {
				if (cb != null)
					cb (this);
			};
		}
예제 #5
0
 protected SimpleAsyncResult(AsyncCallback cb, object state)
 {
     this.state = state;
     this.cb    = result => {
         if (cb != null)
         {
             cb(this);
         }
     };
 }
예제 #6
0
		public static void Run (Func<SimpleAsyncResult, bool> func, SimpleAsyncCallback callback)
		{
			var result = new SimpleAsyncResult (callback);
			try {
				if (!func (result))
					result.SetCompleted (true);
			} catch (Exception ex) {
				result.SetCompleted (true, ex);
			}
		}
예제 #7
0
		public static SimpleAsyncResult Run (SimpleAsyncFunc func, SimpleAsyncCallback callback)
		{
			var result = new SimpleAsyncResult (callback);
			try {
				if (!func (result))
					result.SetCompleted (true);
			} catch (Exception ex) {
				result.SetCompleted (true, ex);
			}
			return result;
		}
예제 #8
0
        public static void Run(Func <SimpleAsyncResult, bool> func, SimpleAsyncCallback callback)
        {
            var result = new SimpleAsyncResult(callback);

            try {
                if (!func(result))
                {
                    result.SetCompleted(true);
                }
            } catch (Exception ex) {
                result.SetCompleted(true, ex);
            }
        }
예제 #9
0
        internal SimpleAsyncResult WriteRequestAsync(SimpleAsyncCallback callback)
        {
            var result = WriteRequestAsync(callback);

            try {
                if (!WriteRequestAsync(result))
                {
                    result.SetCompleted(true);
                }
            } catch (Exception ex) {
                result.SetCompleted(true, ex);
            }
            return(result);
        }
예제 #10
0
        public static SimpleAsyncResult Run(SimpleAsyncFunc func, SimpleAsyncCallback callback)
        {
            var result = new SimpleAsyncResult(callback);

            try {
                if (!func(result))
                {
                    result.SetCompleted(true);
                }
            } catch (Exception ex) {
                result.SetCompleted(true, ex);
            }
            return(result);
        }
		void SetWriteStreamInner (SimpleAsyncCallback callback)
		{
			SimpleAsyncResult.Run (result => {
				if (bodyBuffer != null) {
					// The body has been written and buffered. The request "user"
					// won't write it again, so we must do it.
					if (auth_state.NtlmAuthState != NtlmAuthState.Challenge && proxy_auth_state.NtlmAuthState != NtlmAuthState.Challenge) {
						// FIXME: this is a blocking call on the thread pool that could lead to thread pool exhaustion
						writeStream.Write (bodyBuffer, 0, bodyBufferLength);
						bodyBuffer = null;
						writeStream.Close ();
					}
				} else if (MethodWithBuffer) {
					if (getResponseCalled && !writeStream.RequestWritten)
						return writeStream.WriteRequestAsync (result);
				}

				return false;
			}, callback);
		}
예제 #12
0
		SimpleAsyncResult (SimpleAsyncCallback cb)
		{
			this.cb = cb;
		}
예제 #13
0
 internal SimpleAsyncResult SetHeadersAsync(bool setInternalLength, SimpleAsyncCallback callback)
 {
     return(SimpleAsyncResult.Run(r => SetHeadersAsync(r, setInternalLength), callback));
 }
예제 #14
0
        public static void RunWithLock(object locker, Func <SimpleAsyncResult, bool> func, SimpleAsyncCallback callback)
        {
            Run(inner => {
                bool running = func(inner);
                if (running)
                {
                    Monitor.Exit(locker);
                }
                return(running);
            }, inner => {
                if (inner.GotException)
                {
                    if (inner.synch)
                    {
                        Monitor.Exit(locker);
                    }
                    callback(inner);
                    return;
                }

                try {
                    if (!inner.synch)
                    {
                        Monitor.Enter(locker);
                    }

                    callback(inner);
                } finally {
                    Monitor.Exit(locker);
                }
            });
        }
예제 #15
0
 SimpleAsyncResult(SimpleAsyncCallback cb)
 {
     this.cb = cb;
 }
예제 #16
0
		internal void SetHeadersAsync (bool setInternalLength, SimpleAsyncCallback callback)
		{
			SimpleAsyncResult.Run (r => SetHeadersAsync (r, setInternalLength), callback);
		}
예제 #17
0
		internal SimpleAsyncResult WriteRequestAsync (SimpleAsyncCallback callback)
		{
			var result = WriteRequestAsync (callback);
			try {
				if (!WriteRequestAsync (result))
					result.SetCompleted (true);
			} catch (Exception ex) {
				result.SetCompleted (true, ex);
			}
			return result;
		}
예제 #18
0
 internal void SetHeadersAsync(bool setInternalLength, SimpleAsyncCallback callback)
 {
     SimpleAsyncResult.Run(r => SetHeadersAsync(r, setInternalLength), callback);
 }