C# 使用C语言处理任务并行性和进程#

C# 使用C语言处理任务并行性和进程#,c#,process,task-parallel-library,C#,Process,Task Parallel Library,我试图理解C#()中的数据并行性和进程,并对其行为感到有点困惑。我可能遗漏了一些真正的基本概念,但如果有人能解释这一点,那就太好了 因此,我有以下代码:- private static void Process() { Process _process = new Process(); _process.StartInfo.FileName = "C:\\Windows\\notepad.exe"; _pro

我试图理解C#()中的数据并行性和进程,并对其行为感到有点困惑。我可能遗漏了一些真正的基本概念,但如果有人能解释这一点,那就太好了

因此,我有以下代码:-

private static void Process()
        {
            Process _process = new Process();
            _process.StartInfo.FileName = "C:\\Windows\\notepad.exe";
            _process.StartInfo.UseShellExecute = false;
            _process.StartInfo.RedirectStandardOutput = true;

            // Start the process
            _process.Start();
            _process.BeginOutputReadLine();

            Task task = Task.Factory.StartNew(() => MonitorProcess());


            Console.WriteLine("Main ");
        }

       private static void MonitorProcess()
        {
            Console.WriteLine("Inside Monitor");

            string x = null;
            x = x.Trim();
        }
现在我的期望是,永远不要将“Main”打印到控制台,因为MonitorProcess方法中存在null引用异常。我不想使用task.Wait()捕获并抛出异常,因为这将等待任务完成


那么,为什么会发生这种情况?我如何避免这种情况,以便在MonitorProcess方法出现异常时停止代码执行?

任务在单独的线程(线程池中的一个)中运行。异常不会在主线程中抛出,那么为什么主线程应该停止呢

由于这两个线程并行执行,因此您的
进程
方法甚至可以在
监视器进程
方法引发异常之前打印(并返回)

如果希望主线程停止,则必须将异常传播给它。您可以在此处找到几个示例来说明如何执行此操作:


但是不在主线程中等待的情况下执行此操作仍然不会停止主线程的打印,因为正如我已经说过的,该代码可能已经执行。

您并行执行
MonitorProcess
有什么原因吗?您的代码示例没有多大意义它只是一个示例..我试图理解所有这些背后的基本概念。。。