Пример #1
0
        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();
        }
Пример #2
0
        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);
        }