Skip to content

Instantly share code, notes, and snippets.

@wullemsb
Created November 7, 2016 07:14
public class CalculatorGrain : Grain<CalculatorGrain.GrainState>, ICalculatorGrain
{
private CalculatorLogic _logic;
public class GrainState
{
public List<int> Values { get; set; }
}
public override Task OnActivateAsync()
{
_logic = new CalculatorLogic(
state: State,
grainFactory: GrainFactory,
writeState: WriteStateAsync
);
return base.OnActivateAsync();
}
public Task EnterValue(int value) => _logic.EnterValue(value);
private Task<int> CalculatSum() => _logic.CalculateSum();
}
public class CalculatorLogic
{
private readonly CalculatorGrain.GrainState _state;
private readonly IGrainFactory _grainFactory;
private readonly Func<Task> _writeState;
public CalculatorLogic(
CalculatorGrain.GrainState state,
IGrainFactory grainFactory,
Func<Task> writeState
)
{
_state = state;
_grainFactory = grainFactory;
_writeState = writeState;
}
public async Task EnterValue(int value)
{
_state.Values.Add(value);
await _writeState();
}
public async Task<int> CalculateSum()
{
var sum=_state.Values.Sum();
return Task.FromResult(sum);
}
}
public interface ICalculatorGrain : IGrainWithStringKey
{
Task EnterValue(int value);
Task<int> CalculateSum();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment