Skip to content

Conditional update

Atomically sets the value to the given updated value if the current value == the expected value.

// *******************************************
// synchronous methods
// *******************************************

// Backendless.Counters approach
public bool Backendless.Counters.CompareAndSet( String counterName, Int64 expected, Int64 updated );

// IAtomic approach
IAtomic<T> counter = Backendless.Counters.Of<T>( String counterName );
public bool counter.CompareAndSet( Int64 expected, Int64 updated );

// *******************************************
// asynchronous methods
// *******************************************

// Backendless.Counters approach
public void Backendless.Counters.CompareAndSet<T>( String counterName, Int64 expected, Int64 updated, AsyncCallback<bool> callback );

// IAtomic approach
IAtomic<T> counter = Backendless.Counters.Of<T>( String counterName );
public void counter.CompareAndSet( Int64 expected, Int64 updated, AsyncCallback<T> callback );

where:

Argument                Description
counterName name of the counter to update.
expected the expected value of the counter. If the current value equals the expected value, the counter is set to the "updated" value.
updated the new value to assign to the counter if the current value equals the expected value.
callback the callback used for asynchronous calls to indicate that the operation has either successfully completed or resulted in error.

Example

AsyncCallback<bool> callback = new AsyncCallback<bool>(
  result =>
  {
    System.Console.WriteLine( "[ASYNC] valud has been updated? - " + result );
  },
  fault =>
  {
     System.Console.WriteLine( "Error - " + fault );
  } );

Backendless.Counters.CompareAndSet( "my counter", 1000, 2000, callback );

IAtomic<int> myCounter = Backendless.Counters.Of<int>( "my counter" );
bool updateResult = myCounter.CompareAndSet( 1000, 2000 );
System.Console.WriteLine( "[SYNC] value has been updated? - " + updateResult );

updateResult = Backendless.Counters.CompareAndSet( "my counter", 2000, 3000 );
System.Console.WriteLine( "[SYNC] value has been updated? - " + updateResult );

Codeless Reference

codeless_atomic_counters_set_counter_if_1

where:

Argument                Description
counter name Name of the counter whose value must be set.
expected value This property sets the following condition: If the expected value equals to the current value of the counter, then the operation sets a new number for the counter. Otherwise, the operation does not set the new value for the counter.
new value Specify the new number for the counter.
return current value When this box is checked, the operation returns the current value of the counter.

Returns the current value of the counter.

Consider the following counter:

codeless_atomic_counters_set_counter_if_2

The example below checks if the expected value of the "CarsParkingLot" counter equals to 20, and if it does equal to 20, then the operation sets a new value to 35.

codeless_atomic_counters_set_counter_if_3

The result of this operation will look as shown below after the Codeless logic runs:

codeless_atomic_counters_set_counter_if_4