예제 #1
0
        public void FromCommandLineArgsRaceCondition()
        {
            // https://pytools.codeplex.com/workitem/1429

            var mre   = new ManualResetEvent(false);
            var tasks = new Task <bool> [100];

            try {
                for (int i = 0; i < tasks.Length; i += 1)
                {
                    tasks[i] = Task.Run(() => {
                        mre.WaitOne();
                        using (var arg = VisualStudioProxy.FromProcessId(123)) {
                            return(arg is VisualStudioProxy);
                        }
                    });
                }
                mre.Set();
                Assert.IsTrue(Task.WaitAll(tasks, TimeSpan.FromSeconds(30.0)));
                Assert.IsTrue(tasks.All(t => t.Result));
            } finally {
                mre.Dispose();
                Task.WaitAll(tasks, TimeSpan.FromSeconds(30.0));
            }
        }