public static int AccumulateAndGet(ref this int value, int x, Func <int, int, int> accumulator) => Atomic.Accumulate(ref value, x, accumulator).NewValue;
public static float AccumulateAndGet(ref this float value, float x, Func <float, float, float> accumulator) => Atomic.Accumulate(ref value, x, accumulator).NewValue;
public static double AccumulateAndGet(ref this double value, double x, Func <double, double, double> accumulator) => Atomic.Accumulate(ref value, x, accumulator).NewValue;
public static long AccumulateAndGet(ref this long value, long x, Func <long, long, long> accumulator) => Atomic.Accumulate(ref value, x, accumulator).NewValue;