c# 寫着玩的,兩個Task並發,一個寫隊列一個讀隊列的異常情況


  class Program
    {
        class TestEnqueue
        {
        static    Queue<string> str = new Queue<string>();
        public static   void AddEnqueue()
        {
            for (int i = 0; i < 10; i++)
            {
                string s=  i.ToString();
                    Console.WriteLine("Task1 now runing");
                str.Enqueue(s);
             }
         }
        public static void DelEnqueue()
        {
            for (int i = 0; i < 10; i++)
            {
                    //  string s = i.ToString();
                   
                  string s=  str.Dequeue();
                    Console.WriteLine("Task2 now runing::::"+ s);
                }
        }
        }
        static void Main(string[] args)
        {
            Task t1 = new Task(TestEnqueue.AddEnqueue);
            t1.Start();
            Task t2 = new Task(TestEnqueue.DelEnqueue);
            t2.Start();
            Console.ReadKey();
        }
    }
}

t2在隊列為空的時候報錯。

有報錯時候是這樣

 

好像還是沒法測出兩個task同時一個在寫,然后一個在讀。幾乎同時運行的效果。

另外程序報錯之后出錯地str 實際是10個數的,為何有數還報錯,可能是報錯延緩吧,t2報錯時,t1還在往里寫數據,等錯顯示出來之后,t1運行完了。不知能否這么理解

 

加一行代碼

Task t2 = new Task(TestEnqueue.DelEnqueue);
t1.Start();
t2.Wait();
t2.Start();

 啟動 Task() 時效

Stopwatch sw = new Stopwatch();
sw.Start();
Task t = new Task(MakeResult);
t.Start();
sw.Stop();
Debug.WriteLine(" 觸發時間ms:"+sw.Elapsed.TotalMilliseconds); ;

第一次啟動20毫秒。第二次開始變低


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM