Beispiel #1
0
        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();
        }
Beispiel #2
0
        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;
            }
        }