# threaded_peek/1-2

## Description

    threaded_peek(Goal)
    threaded_peek(Goal, Tag)

Checks if the result of proving `Goal` in a new thread is already available. This call succeeds or fails without blocking execution waiting for a reply to be available.

The argument of this predicate should be a variant of the argument of the corresponding threaded_call/1 or threaded_once/1 call. When the predicate argument is subsumed by the `threaded_call/1` or `threaded_once/1` call argument, the `threaded_peek/1` call will succeed iff its argument unifies with an already available solution of the (more general) goal.

The `threaded_peek/2` variant accepts a threaded call identifier tag generated by the calls to the threaded_call/2 and threaded_once/2 predicates. Tags shall be regarded as an opaque term; users shall not rely on its type.

## Modes and number of proofs

    threaded_peek(+callable) - zero_or_one
    threaded_peek(+callable, +nonvar) - zero_or_one

## Errors

`Goal` is a variable:
`instantiation_error`
`Goal` is neither a variable nor a callable term:
`type_error(callable, Goal)`
`Tag` is a variable:
`instantiation_error`

## Examples

To check for an asynchronous goal proof result:
`threaded_peek(Goal)`
To check for an asynchronous message to self result:
`threaded_peek(::Goal)`
To check for an asynchronous message result:
`threaded_peek(Object::Goal)`

See also

threaded_call/1-2, threaded_exit/1-2, threaded_ignore/1, threaded_once/1-2, threaded_cancel/1, threaded/1