private static void complete(HttpListenerAsyncResult asyncResult) { lock (asyncResult._sync) { asyncResult._completed = true; var waitHandle = asyncResult._waitHandle; if (waitHandle != null) { waitHandle.Set(); } } var callback = asyncResult._callback; if (callback == null) { return; } ThreadPool.QueueUserWorkItem( state => { try { callback(asyncResult); } catch { } }, null ); }
internal HttpListenerAsyncResult BeginGetContext(HttpListenerAsyncResult asyncResult) { lock (_ctxRegistrySync) { if (!_listening) { throw new HttpListenerException(995); } var ctx = getContextFromQueue(); if (ctx == null) { _waitQueue.Add(asyncResult); } else { asyncResult.Complete(ctx, true); } return(asyncResult); } }