【问题标题】:Handling exceptions in new process处理新进程中的异常
【发布时间】:2015-06-24 07:08:47
【问题描述】:

我从我的应用程序中运行一个进程。有时第二个进程失败并抛出异常,但我无法在我的第一个进程中处理它们并且主应用程序崩溃,我该怎么办。

我运行第二个过程如下:

try
{
Process proc = new Process();
...
proc.Start();
}
catch (Exception exp)
{
// never stops here even if proc fails
}

【问题讨论】:

  • 您一定要使用进程,还是可以将第二个进程的工作安排到任务?如果是这样,上面的代码应该等待工作任务完成(Task.Wait),并可以检查 Task.IsFaulted 以了解任务是否由于未处理的异常而结束。
  • 异常及其处理是按进程进行的。您无法捕获从不同进程引发的异常。

标签: .net process exception-handling


【解决方案1】:

如果您想从流程执行切换到基于任务的执行,您可以尝试以下方式:

using System;
using System.Threading.Tasks;

namespace ExceptionsInTasks
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 4; i++)
            {                    
                try
                {
                    var t = Task.Factory.StartNew(() => DoWork(i));
                    t.Wait();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Exception occured in run {0}: {1}", i, ex.InnerException.Message);
                }
            }

            Console.ReadLine();
        }

        private static void DoWork(int i)
        {
            if (i % 2 == 0)
            {
                throw new System.Exception("Faulty execution");
            }
            else
            {
                Console.WriteLine("Successful execution in run " + i);
            }
        }
    }
}

这将导致以下输出。请注意,启动方法甚至通过InnerException 属性包含有关实际异常的详细信息。

  • 运行 0 中发生异常:执行错误
  • 在运行 1 中成功执行
  • 运行 2 中发生异常:执行错误
  • 在运行 3 中成功执行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多