anchor.diff:      if lvRequest <> nil then requestPool.EnQueue(lvRequest);
       raise;
     end;
  +end;
  +
  +procedure TIocpTaskMananger.PostATask(pvTaskWork: TOnTaskWorkActionIDStrData;
  +    const pvActionID: Integer; const pvStrData: string; pvRunInMainThread:
  +    Boolean = False; pvRunType: TRunInMainThreadType = rtSync);
  +var
  +  lvRequest:TIocpTaskRequest;
  +begin
  +  if not FEnable then Exit;
  +  lvRequest := TIocpTaskRequest(requestPool.DeQueue);
  +  try
  +    if lvRequest = nil then
  +    begin
  +      lvRequest := TIocpTaskRequest.Create;
  +    end;
  +    lvRequest.DoCleanUp;
  +
  +    lvRequest.FOwner := self;
  +    lvRequest.FOnTaskWorkActionIdData := pvTaskWork;
  +    lvRequest.FActionID := pvActionID;
  +    lvRequest.FStrData := pvStrData;
  +    lvRequest.FRunInMainThread := pvRunInMainThread;
  +    lvRequest.FRunInMainThreadType := pvRunType;
  +
  +    InnerPostTask(lvRequest);
  +  except
  +    // if occur exception, push to requestPool.
  +    if lvRequest <> nil then requestPool.EnQueue(lvRequest);
  +    raise;
  +  end;
  +
   end;
   
   procedure TIocpTaskMananger.SetActive(const Value: Boolean);
  
positive.code:   end;
  end;
  
  procedure TIocpTaskMananger.PostATask(pvTaskWork: TOnTaskWork;
    pvStrData: string; pvRunInMainThread: Boolean;
    pvRunType: TRunInMainThreadType);
  var
    lvRequest:TIocpTaskRequest;
  begin
  
negative.code:     procedure PostATask(pvTaskWorkProc: TOnTaskWorkProc; pvTaskData: Pointer = nil;
          pvRunInMainThread: Boolean = False; pvRunType: TRunInMainThreadType =
          rtSync); overload;
  
  
  
      /// <summary>
  