Skip to content

j3pic/cl-async-await

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CL-ASYNC-AWAIT

This library allows you to have async functions similar to those in JavaScript, only these async functions are implemented with threads instead of an event dispatching mechanism.

Cross-thread error handling is easy using CL-ASYNC-AWAIT, since the AWAIT operator propagates errors from the promise, and also propagates invoked restarts back to the promise.

Simple example

(defun-async my-async-reader (stream)
  (read-byte stream))

(defvar *promise* (my-async-reader *some-stream*))
(defvar *my-byte* (await *promise*))

Usage

(lambda-async lambda-list &body body)

Creates a CL:LAMBDA function that creates a PROMISE when FUNCALLed.

(defun-async name lambda-list &body body)

Like LAMBDA-ASYNC but expands to a CL:DEFUN form instead of a CL:LAMBDA form.

(await promise)

Wait for a PROMISE to resolve to one or more values. If the promise succeeds, the values will be returned using CL:VALUES.

If an error occurs in the PROMISE thread and is not handled within the promise, execution of the PROMISE thread is suspended until the AWAIT method is called.

That error will then be signalled in the thread from which AWAIT is called, in a context where all the same restarts are defined as are defined in the PROMISE thread. If INVOKE-RESTART is called with one of these restarts, that restart will be invoked in the PROMISE thread, and AWAIT will return that restart's value form.

If the stack frame for the call to AWAIT is unwound without invoking a restart, the PROMISE thread will invoke its CL:ABORT restart.

Whether the PROMISE succeeds or fails, the result is memoized. Calling AWAIT a second time on the same PROMISE will yield the same values.

If an error occurred and AWAIT is called a second time, the same error will be signalled, but the restarts will not be available, since the PROMISE thread is expected to be dead as a result of invoking the ABORT restart.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published