public static async Task CreateAndRunLottery() { var policy = Policy.Handle <TimeoutException>().Retry(5); // Console.Write("Creating Lottery ... "); var lottery = await Lottery.CreateLottery().ConfigureAwait(false); Instance.ReportInfo($"Lottery {lottery.Id} was created and will overdue at {lottery.DueTime}"); // Console.WriteLine($"Done {lottery.Id}"); //Console.WriteLine("Start betting"); var takeItEasy = Environment.GetEnvironmentVariable("RAVEN_SLOW_MACHINE") ?? "N"; var t = StartPlacingBets(lottery, takeItEasy.Contains("Y", StringComparison.InvariantCultureIgnoreCase) ? 1000 : 10); Instance.ReportInfo($"Start betting in lottery {lottery.Id}"); var sleep = (int)(lottery.DueTime - DateTime.UtcNow).TotalMilliseconds; if (sleep > 10) { await Task.Delay(sleep).ConfigureAwait(false); } Instance.ReportInfo($"Lottery {lottery.Id} is overdue"); //Console.Write("Finalize bets ... "); await policy.Execute(lottery.FinalizeBets).ConfigureAwait(false); //Console.WriteLine("Done"); Instance.ReportInfo($"Rolling the dice for lottery {lottery.Id}"); //Console.WriteLine("Rolling the Dice ... "); lottery.RollTheDice(); //Console.Write("Completing the lottery ... "); await policy.Execute(lottery.Complete); Instance.ReportInfo($"Lottery {lottery.Id} is completed"); // Console.WriteLine("Done"); var profit = await policy.Execute(lottery.GetFinalBettingReport).ConfigureAwait(false); Instance.ReportSuccess($"Report for lottery {lottery.Id} was generated and winners were rewarded."); // Console.WriteLine(profit); await t.ConfigureAwait(false); }
public async Task CreateAndRunLottery() { var policy = Policy.Handle <TimeoutException>().Retry(5); Console.Write("Creating Lottery ... "); var lottery = await Lottery.CreateLottery(this); ReportEvent(new EventInfo { Message = $"Lottery {lottery.Id} was created and will overdue at {lottery.DueTime}", Type = EventInfo.EventType.Info }); Console.WriteLine($"Done {lottery.Id}"); Console.WriteLine("Start betting"); var t = StartPlacingBets(lottery, 1000); ReportEvent(new EventInfo { Message = $"Start betting in lottery {lottery.Id}", Type = EventInfo.EventType.Info }); var sleep = (int)(lottery.DueTime - DateTime.UtcNow).TotalMilliseconds; if (sleep > 10) { await Task.Delay(sleep); } ReportEvent(new EventInfo { Message = $"Lottery {lottery.Id} is overdue", Type = EventInfo.EventType.Info }); Console.Write("Finalize bets ... "); await policy.Execute(lottery.FinalizeBets); Console.WriteLine("Done"); ReportEvent(new EventInfo { Message = $"Rolling the dice for lottery {lottery.Id}", Type = EventInfo.EventType.Info }); Console.WriteLine("Rolling the Dice ... "); lottery.RollTheDice(); Console.Write("Completing the lottery ... "); await policy.Execute(lottery.Complete); ReportEvent(new EventInfo { Message = $"Lottery {lottery.Id} is completed", Type = EventInfo.EventType.Info }); Console.WriteLine("Done"); var profit = await policy.Execute(lottery.GetFinalBettingReport); ReportEvent(new EventInfo { Message = $"Report for lottery {lottery.Id} was generated and winners were rewarded.", Type = EventInfo.EventType.TestSuccess }); Console.WriteLine(profit); await t; }