使用C#中的任务并行性和进程
本文关键字:并行性 进程 任务 使用 | 更新日期: 2023-09-27 18:22:04
我试图理解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方法中的异常处停止代码执行呢?
任务在单独的线程(线程池中的一个线程)中运行。异常没有在主线程中抛出,那么为什么主线程应该停止呢?
由于这两个线程是并行执行的,因此Process
方法甚至可能在MonitorProcess
方法中抛出异常之前打印(并返回)。
如果你想让你的主线程停止,你必须将异常传播给它;通过等待任务或访问其exception属性,未观察到s个异常。因此,未观察到的异常是
但是这样做而不在主线程中等待仍然不会阻止主线程打印,因为正如我已经说过的,代码可能已经被执行了。