built-in predicate

threaded_call/1-2

Description

threaded_call(Goal)
threaded_call(Goal, Tag)

Proves Goal asynchronously using a new thread. The argument can be a message-sending goal. Calls to this predicate always succeed and return immediately. The results (success, failure, or exception) are sent back to the message queue of the object containing the call (this) and can be retrieved by calling the threaded_exit/1 predicate.

The threaded_call/2 variant returns a threaded call identifier tag that can be used with the threaded_exit/2 and threaded_cancel/1 predicates. Tags shall be regarded as opaque terms; users shall not rely on their 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.

Meta-predicate template

threaded_call(0)
threaded_call(0, *)

Modes and number of proofs

threaded_call(@callable) - one
threaded_call(@callable, --nonvar) - one

Errors

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

Examples

Prove Goal asynchronously in a new thread:
threaded_call(Goal)
Prove ::Message asynchronously in a new thread:
threaded_call(::Message)
Prove Object::Message asynchronously in a new thread:
threaded_call(Object::Message)