Alias for synchronize.
Synchronize, blocking for the result.
Synchronize (discarding the value), and then invoke the given closure.
Synchronize (discarding the value), and then invoke the given closure. Convenient for loops.
Synonym for map()
.
Synonym for map()
. Useful in combination with Offer.choose()
and Offer.select()
Like {{map}}, but to a constant (call-by-name).
Synchronize on this offer indefinitely, invoking the given {{f}} with each successfully synchronized value.
Synchronize on this offer indefinitely, invoking the given {{f}} with each successfully synchronized value. A receiver can use this to enumerate over all received values.
Map this offer of type {{T}} into one of type {{U}}.
Map this offer of type {{T}} into one of type {{U}}. The translation (performed by {{f}}) is done after the {{Offer[T]}} has successfully synchronized.
Java-friendly analog of const()
.
Java-friendly analog of const()
.
An offer that, when synchronized, attempts to synchronize {{this}} immediately, and if it fails, synchronizes on {{other}} instead.
An offer that, when synchronized, attempts to synchronize {{this}} immediately, and if it fails, synchronizes on {{other}} instead. This is useful for providing default values. Eg.:
offer orElse Offer.const { computeDefaultValue() }
Synchronizes this offer, returning a future representing the result of the synchronization.
Synchronize this offer, blocking for the result.
Synchronize this offer, blocking for the result. See {{sync()}} and {{com.twitter.util.Future.apply()}}
Synonym for sync()
Synonym for sync()
(Since version 5.x) use sync() instead
An offer to communicate with another process. The offer is parameterized on the type of the value communicated. An offer that sends a value typically has type {{Unit}}. An offer is activated by synchronizing it, which is done with
sync()
.Note that Offers are persistent values -- they may be synchronized multiple times. They represent a standing offer of communication, not a one-shot event.
The synchronization protocol
Synchronization is performed via a two-phase commit process.
prepare()
commences the transaction, and when the other party is ready, it returns with a transaction object,Tx[T]
. This must then be ackd or nackd. If both parties acknowledge,Tx.ack()
returns with a commit object, containing the value. This finalizes the transaction. Please see theTx
documentation for more details on that phase of the protocol.Note that a user should never perform this protocol themselves -- synchronization should always be done with
sync()
.Future interrupts are propagated, and failure is passed through. It is up to the implementer of the Offer to decide on failure semantics, but they are always passed through in all of the combinators.
Note: There is a Java-friendly API for this trait: com.twitter.concurrent.AbstractOffer.