WaitHandle.Wait还没等?

时间:2014-07-17 12:07:53

标签: c# .net multithreading delegates

我有一个控制台应用程序,我正在尝试使用.NET 3.5进行一些线程处理。

    int[] iArrReports = { 6/*, 103*/ };
    WaitHandle[] handles = new WaitHandle[iArrReports.Length];
    for(int i = 0; i < iArrReports.Length; i++)
    {
      PerformMergeDelegate mergeDelegate = new PerformMergeDelegate(doWork);
      IAsyncResult result = mergeDelegate.BeginInvoke(iArrReports[i], (r) =>
      {
        Logger delegateLogger = mergeDelegate.EndInvoke(r);
        if (delegateLogger.iMessageLevel == Logger.LOG_LEVELS.LEVEL_ERROR)
        {
          try
          {
            Monitor.Enter(logger);
            logger.LogFile(delegateLogger.strErrorMessage);
          }
          finally
          {
            Monitor.Exit(logger);
          }
        }
      }, null);
      handles[i] = result.AsyncWaitHandle;
    }
    WaitHandle.WaitAll(handles);

当我单步执行VS2013中的代码时,我的doWork方法中设置了一个断点,但是在点击后不久,WaitAll似乎返回并且应用程序关闭。我在iArrReports中注释了第二个条目,仅用于测试。

为什么我的申请会结束?我认为WaitAll应该等到代表完全执行。

1 个答案:

答案 0 :(得分:1)

将调试器设置为中断所有异常。你可能会发现一个未处理的异常已经杀死了这个过程。

更好地使用TPL。本来可以防止这个错误。