Object PageletServer::TaskStart(CStrRef url, CArrRef headers,
                                CStrRef remote_host,
                                CStrRef post_data /* = null_string */) {
  if (RuntimeOption::PageletServerThreadCount <= 0) {
    return null_object;
  }
  PageletTask *task = NEW(PageletTask)(url, headers, remote_host, post_data);
  Object ret(task);
  PageletTransport *job = task->getJob();
  job->incRefCount(); // paired with worker's decRefCount()
  ASSERT(s_dispatcher);
  s_dispatcher->enqueue(job);

  return ret;
}
String PageletServer::TaskResult(CObjRef task, Array &headers, int &code) {
  PageletTask *ptask = task.getTyped<PageletTask>();
  return ptask->getJob()->getResults(headers, code);
}
bool PageletServer::TaskStatus(CObjRef task) {
  PageletTask *ptask = task.getTyped<PageletTask>();
  return ptask->getJob()->isDone();
}