Exemple #1
0
        static void Main(string[] args)
        {
            Console.WriteLine(AsyncCourse.GetThreadPoolHint(true));
            Console.WriteLine(AsyncCourse.GetThreadPoolInfo(true));
            Console.WriteLine(AsyncCourse.CurrentThreadId);
            var url  = AsyncCourse.GetAddAPIUrl(3, 5, 2000, false);
            var urls = AsyncCourse.GetAddAPIUrls(new List <(int value1, int value2, int delayms, bool isAsync)>
            {
                (15, 21, 2000, true),
                (175, 21, 1000, true),
                (15, 321, 4000, true),
            });

            AsyncCourse.Output((url, CColor.Yellow), ("abcc", CColor.Red));
            AsyncCourse.ShowThreadInformation("Test...");
            AsyncCourse.PressAnyKey();
        }
Exemple #2
0
        static void Main(string[] args)
        {
            #region 顯示預設執行緒集區的設定內容
            Console.WriteLine(AsyncCourse.GetThreadPoolHint(true));
            Console.WriteLine(AsyncCourse.GetThreadPoolInfo());
            Console.WriteLine();

            // 準備好要開始執行,按下任一按鍵
            Console.WriteLine("Press any key for continuing...");
            Console.ReadKey();
            #endregion

            #region 重新調整執行緒集區的設定
            //Process.GetCurrentProcess().ProcessorAffinity = (IntPtr)0b0000_1000;
            // 設定執行緒集區隨著提出新要求,視需要建立的執行緒最小數目
            ThreadPool.SetMinThreads(x最小執行緒數量, x最小執行緒數量);
            // 設定可並行使用之執行緒集區的要求數目。 超過該數目的所有要求會繼續佇列,直到可以使用執行緒集區執行緒為止
            ThreadPool.SetMaxThreads(x最大執行緒數量, x最大執行緒數量);

            Console.WriteLine(AsyncCourse.GetThreadPoolInfo());
            Console.WriteLine();
            #endregion

            #region  建立一個執行緒,監聽使用者輸入的按鍵
            new Thread(x =>
            {
                while (true)
                {
                    // 輸入 1~9 之間的按鍵,將會結束指定索引的執行緒執行
                    ConsoleKeyInfo key = Console.ReadKey();
                    ActionKeyChar      = key.KeyChar - beginNumberOneASCII;
                    if (key.Key == ConsoleKey.C)
                    {
                        for (int i = 1; i <= x迴圈數量; i++)
                        {
                            ActionKeyChar = i;
                            Thread.Sleep(110);
                        }
                    }
                }
            }).Start();
            #endregion

            #region 向執行緒集區要求 20 個執行緒
            for (int i = 1; i <= x迴圈數量; i++)
            {
                int idx = i;
                ThreadPool.QueueUserWorkItem(_ =>
                {
                    Console.WriteLine($"({idx}) {AsyncCourse.CurrentThreadId} 已經啟動執行了" +
                                      $"({DateTime.Now})");
                    while (true)
                    {
                        Thread.Sleep(100);
                        //await Task.Delay(100);
                        if (idx == ActionKeyChar)
                        {
                            ActionKeyChar = -10;
                            break;
                        }
                    }
                    Console.WriteLine($"   ({idx}) {AsyncCourse.CurrentThreadId} 準備結束執行");
                });
            }
            #endregion
        }