private static async Task AsyncMain() { // Create a logger; var consoleLogger = new ConsoleLogger(); // Create two players. var trump = new Player(consoleLogger, "Trump", 0.92); var clinton = new Player(consoleLogger, "Clinton", 0.9); // Start several concurrent games between players. ConsoleColor[] colors = { ConsoleColor.Cyan, ConsoleColor.Blue, ConsoleColor.Green, ConsoleColor.Magenta, ConsoleColor.Yellow, ConsoleColor.Red, }; var games = colors.Select(color => trump.Ping(clinton, color)).ToArray(); // Wait for all games to finish. await Task.WhenAll(games); consoleLogger.WriteLine("We are all done"); // Display winner and stats. for (var i = 0; i < games.Length; i++) { consoleLogger.WriteLine(string.Format("Winner for game {0}: {1}", colors[i], games[i].Result), colors[i]); } consoleLogger.WriteLine(string.Format("{0} totally received {1} balls", trump, await trump.GetCounter())); consoleLogger.WriteLine(string.Format("{0} totally received {1} balls", clinton, await clinton.GetCounter())); // Wait for the console logger. await consoleLogger.Flush(); }
public async Task <Player> Ping(Player peer, ConsoleColor color) { logger.WriteLine( string.Format("{0}.Ping( color={1} ) from thread {2}", name, color, Thread.CurrentThread.ManagedThreadId), color); if (random.NextDouble() <= skills) { counter++; return(await peer.Ping(this, color)); } return(peer); }