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