Имеется класс GetContent : IHttpAsyncHandler
Внутри делаю по примеру из MSDN:
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
{
var asynch = new AsynchOperation(cb, context, extraData);
var prg = new ProcessRequestDelegate(MyProcessRequest);
asynch.StartAsyncWork(prg);
return asynch;
}
public void EndProcessRequest(IAsyncResult result)
{
}
public bool IsReusable
{
get { return false; } // Пробовал и True и False
}
class AsynchOperation : IAsyncResult
{
private bool _completed;
private Object _state;
private AsyncCallback _callback;
private HttpContext _context;
bool IAsyncResult.IsCompleted { get { return _completed; } }
WaitHandle IAsyncResult.AsyncWaitHandle { get { return null; } }
Object IAsyncResult.AsyncState { get { return _state; } }
bool IAsyncResult.CompletedSynchronously { get { return false; } }
public AsynchOperation(AsyncCallback callback, HttpContext context, Object state)
{
_callback = callback;
_context = context;
_state = state;
_completed = false;
}
public void StartAsyncWork(GetContent.ProcessRequestDelegate func)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(StartAsyncTask), func);
}
private void StartAsyncTask(object func)
{
((GetContent.ProcessRequestDelegate)func).Invoke(_context);
_completed = true;
_callback(this);
}
}
Проблема в том, что он работает синхронно
вчера весь день потратил на дебаг, но безрезультатно.
Т.е. получается что пока не сработает EndProcessRequest новый запрос не обрабатывается.
Если я внутри MyProcessRequest добавляю sleep на 30 секунд например, то в течении этого времени
BeginProcessRequest второй раз не вызывается.