在线程方法中隐藏值

您好我正在尝试在线程lambda方法内传递循环的当前索引并打印它。该方法将仅显示索引的最后一个值。


class Program {

        public static EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.AutoReset);

        public static EventWaitHandle autohandle = new EventWaitHandle(false, EventResetMode.AutoReset);

        static readonly int ThreadNum=3;


        static void Main(string[] args) {

            object lk = new object();

            new Thread(() => {


                while (true) {


                    var key = Console.ReadKey();

                    if(key.Key==ConsoleKey.A) {

                        handle.Set();

                    } else {

                        handle.Reset();

                    }

                    Thread.Sleep(3000);



                }

            }).Start();


            for(int i=0;i<ThreadNum;i++) {


                new Thread(() => {

                    int val = i;

                    Console.WriteLine($"Thread:{val} created");

                    while (true) {


                        handle.WaitOne();


                        Console.WriteLine($"From thread:{val}");

                        Thread.Sleep(1000);

                    }

                }).Start();

            }


            Console.WriteLine("Hello World!");

        }


    }

有人可以向我解释为什么我只得到索引的最后一个值。我理解索引被阻塞了(创建了一个复制索引值的类),但是当第一次迭代进入线程方法时,它应该阻塞i = 0并保持这种方式。


尚方宝剑之说
浏览 137回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP