public async Task Complete() { using (var session = Casino.GetSessionAsync) { session.Advanced.WaitForReplicationAfterSaveChanges(TimeSpan.FromSeconds(180), replicas: Casino.ReplicaCount()); var lottery = await session.LoadAsync <Lottery>(Id).ConfigureAwait(false); lottery.Result = Result; lottery.Status = Status; await session.SaveChangesAsync().ConfigureAwait(false); } }
public static async Task <Lottery> CreateLottery() { var lottery = new Lottery($"Lottery/{DateTime.UtcNow}/" + Guid.NewGuid()) { DueTime = DateTime.UtcNow.AddMinutes(1), Status = LotteryStatus.Open }; using (var session = Casino.GetSessionAsync) { session.Advanced.WaitForReplicationAfterSaveChanges(timeout: TimeSpan.FromSeconds(180), replicas: Casino.ReplicaCount()); await session.StoreAsync(lottery, lottery.Id).ConfigureAwait(false); await session.SaveChangesAsync().ConfigureAwait(false); } return(lottery); }
public async Task FinalizeBets() { using (var session = Casino.GetSessionAsync) { // ensures that no more bets accepted after this session is committed session.Advanced.WaitForReplicationAfterSaveChanges(TimeSpan.FromSeconds(180), replicas: Casino.ReplicaCount()); var lottery = await session.LoadAsync <Lottery>(Id).ConfigureAwait(false); lottery.Status = LotteryStatus.PendingResults; await session.StoreAsync(new Bet { LotteryId = Id, BetStatus = Bet.Status.Closed }, $"close/{Id}").ConfigureAwait(false); await session.SaveChangesAsync().ConfigureAwait(false); } if (_collecting.WaitOne(TimeSpan.FromSeconds(60)) == false) { throw new TimeoutException(); } }