'Finalize the signature by adding a concrete task id.
The task won\'t be called and you shouldn\'t call the signature
twice after freezing it as that\'ll result in two task messages
using the same task id.
Returns:
~@AsyncResult: promise of future evaluation.'

def freeze(self, _id=None, group_id=None, chord=None, root_id=None, parent_id=None):

    opts = self.options
    try:
        tid = opts[u'task_id']
    except KeyError:
        tid = opts[u'task_id'] = (_id or uuid())
    if root_id:
        opts[u'root_id'] = root_id
    if parent_id:
        opts[u'parent_id'] = parent_id
    if (u'reply_to' not in opts):
        opts[u'reply_to'] = self.app.oid
    if group_id:
        opts[u'group_id'] = group_id
    if chord:
        opts[u'chord'] = chord
    return self.AsyncResult(tid)
