使用任务和异常处理进行多线程处理

时间:2013-11-22 09:28:20

标签: c# multithreading

我有一个用C#.Net 4.5创建的应用程序。我通过任务类使用多线程。我想添加一些错误处理。具体来说,我希望任何例外都可以在应用程序的顶部冒泡。

我遇到的问题是,在使用任务时,未处理的例外情况或其他问题是如何工作的。

我一直在阅读此页http://msdn.microsoft.com/en-us/library/dd997415(v=vs.110).aspx。我的理解是,如果我有多个任务正在运行并且发生错误,我必须等到调用Task.WaitAll(someTask)并且可以在那里处理它 - 这是正确的吗?是否有可能在一个任务上发生错误,在必须等待Task.WaitAll(someTask)之前取消所有其他任务?

以下是我的代码片段。我想嵌套任务同样的原则适用于我必须等到在处理我的错误之前调用了Task.WAitAll()之后?我对这个应用程序的方法相当简单,我想要记录任何execption,然后关闭应用程序。只是不确定这如何适用于任务。

这也是我创建两个TaskFactory的方式吗?两种方法都属于不同的类别。

public void RunTimePeriods()
        {
            _taskFactory = new TaskFactory();

            Task[] taskTimePeriod = new Task[_timePeriods.Length];

            for (int i = 0; i < taskTimePeriod.Length; i++)
                taskTimePeriod[i] = _taskFactory.StartNew(_timePeriods[i].RunIndicators);

            Task.WaitAll(taskTimePeriod);
         }


public void RunIndicators()
        {
            _taskFactory = new TaskFactory();

            Task[] taskIndicator = new Task[_indicator.Length];

            for (int i = 0; i < taskIndicator.Length; i++)
                taskIndicator[i] = _taskFactory.StartNew(_indicator[i].Run);
        }

1 个答案:

答案 0 :(得分:2)

  

在必须等待Task.WaitAll(someTask)之前,在一个任务上发生错误以取消所有其他任务是否有可能?

您可以执行此操作的唯一方法是通知其他任务停止他们正在执行的操作。此类通信的一般解决方案是使用task cancellation

这是一个很好的walkthrough