built-in predicate

# `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. When there is no thread proving the goal, the predicate generates an exception.

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.

Note

This predicate requires a backend Prolog compiler providing compatible multi-threading primitives. The value of the read-only threads flag is set to `supported` when that is the case.

## 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)`
No thread is running for proving `Goal` in the `Object` calling context:
`existence_error(thread, Object)`
`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