FutureBase = ref object of RootObj
callbacks: CallbackList
finished: bool
error*: ref Exception ## Stored exception
errorStackTrace*: string
when not false:
stackTrace: string ## For debugging purposes only.
id: int
fromProc: stringFuture[T] = ref object of FutureBase value: T ## Stored value
FutureVar[T] = distinct Future[T]
FutureError = object of Exception cause*: FutureBase
proc getCallSoonProc(): (proc (cbproc: proc ()) {...}{.gcsafe.}) {...}{.raises: [], tags: [].}callSoon. proc setCallSoonProc(p: (proc (cbproc: proc ()) {...}{.gcsafe.})) {...}{.raises: [], tags: [].}callSoon. This is normally called when dispatcher from asyncdispatcher is initialized. proc callSoon(cbproc: proc ()) {...}{.raises: [Exception], tags: [RootEffect].}Call cbproc "soon".
If async dispatcher is running, cbproc will be executed during next dispatcher tick.
If async dispatcher is not running, cbproc will be executed immediately.
proc newFuture[T](fromProc: string = "unspecified"): Future[T]
Creates a new future.
Specifying fromProc, which is a string specifying the name of the proc that this future belongs to, is a good habit as it helps with debugging.
proc newFutureVar[T](fromProc = "unspecified"): FutureVar[T]
Create a new FutureVar. This Future type is ideally suited for situations where you want to avoid unnecessary allocations of Futures.
Specifying fromProc, which is a string specifying the name of the proc that this future belongs to, is a good habit as it helps with debugging.
proc clean[T](future: FutureVar[T])
finished status of future. proc complete[T](future: Future[T]; val: T)
future with value val. proc complete(future: Future[void]) {...}{.raises: [FutureError, Exception],
tags: [RootEffect].}future. proc complete[T](future: FutureVar[T])
FutureVar. proc complete[T](future: FutureVar[T]; val: T)
Completes a FutureVar with value val.
Any previously stored value will be overwritten.
proc fail[T](future: Future[T]; error: ref Exception)
future with error. proc clearCallbacks(future: FutureBase) {...}{.raises: [], tags: [].}proc addCallback(future: FutureBase; cb: proc () {...}{.closure, gcsafe.}) {...}{.
raises: [Exception], tags: [RootEffect].}Adds the callbacks proc to be called when the future completes.
If future has already completed then cb will be called immediately.
proc addCallback[T](future: Future[T];
cb: proc (future: Future[T]) {...}{.closure, gcsafe.})Adds the callbacks proc to be called when the future completes.
If future has already completed then cb will be called immediately.
proc callback=(future: FutureBase; cb: proc () {...}{.closure, gcsafe.}) {...}{.
raises: [Exception], tags: [RootEffect].}Clears the list of callbacks and sets the callback proc to be called when the future completes.
If future has already completed then cb will be called immediately.
It's recommended to use addCallback or then instead.
proc callback=[T](future: Future[T];
cb: proc (future: Future[T]) {...}{.closure, gcsafe.})Sets the callback proc to be called when the future completes.
If future has already completed then cb will be called immediately.
proc `$`(entries: seq[StackTraceEntry]): string {...}{.raises: [ValueError], tags: [].}proc read[T](future: Future[T] | FutureVar[T]): T
Retrieves the value of future. Future must be finished otherwise this function will fail with a ValueError exception.
If the result of the future is an error then that error will be raised.
proc readError[T](future: Future[T]): ref Exception
Retrieves the exception stored in future.
An ValueError exception will be thrown if no exception exists in the specified Future.
proc mget[T](future: FutureVar[T]): var T
Returns a mutable value stored in future.
Unlike read, this function will not raise an exception if the Future has not been finished.
proc finished(future: FutureBase | FutureVar): bool
Determines whether future has completed.
True may indicate an error or a value. Use failed to distinguish.
proc failed(future: FutureBase): bool {...}{.raises: [], tags: [].}future completed with an error. proc asyncCheck[T](future: Future[T])
Sets a callback on future which raises an exception if the future finished with an error.
This should be used instead of discard to discard void futures.
proc `and`[T, Y](fut1: Future[T]; fut2: Future[Y]): Future[void]
fut1 and fut2 complete. proc `or`[T, Y](fut1: Future[T]; fut2: Future[Y]): Future[void]
fut1 or fut2 complete. proc all[T](futs: varargs[Future[T]]): auto
Returns a future which will complete once all futures in futs complete. If the argument is empty, the returned future completes immediately.
If the awaited futures are not Future[void], the returned future will hold the values of all awaited futures in a sequence.
If the awaited futures are Future[void], this proc returns Future[void].
© 2006–2018 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/asyncfutures.html