在c#控制台应用程序中使用线程概念并行执行两个以上的Dtsx包

本文关键字:两个 Dtsx 并行执行 应用程序 控制台 线程 | 更新日期: 2023-09-27 18:17:04

我有一个控制台应用程序,需要以以下方式执行总共17个SSIS Dtsx包。

[1]在第一个线程中,它应该同时并行执行3个包[2]在第二个线程中,它应该同时并行执行5个包,以此类推…

我听说过一个叫做并行的概念,它用于更高版本的。net Framework 4.0等。但是我不确定如何在project中实现相同的。

我已经尝试了一些使用线程的示例,这是我的代码片段。

            Thread.Sleep(2000);
            Thread First = new Thread(new ThreadStart(FirstThread));
            Thread Second = new Thread(new ThreadStart(SecondThread));
            Thread Third = new Thread(new ThreadStart(ThirdThread));
            First.Start();
            Second.Start();
            Third.Start();
    static void FirstThread()
    {
        try
        {
            DTSXProcesser pkgProcess = new DTSXProcesser();
            pkgProcess.ExecutePackage("Customers.csv");
            pkgProcess.ExecutePackage("RouteInfo.csv");
            pkgProcess.ExecutePackage("Items.csv");
        }
        catch (Exception ex)
        {
            Logger.Log("Exception in Execution Of Package. Error : " + ex.ToString());
            Thread.ResetAbort();
        }         
    }

在c#控制台应用程序中使用线程概念并行执行两个以上的Dtsx包

与。net 4:

使用任务:

Task[] tasks = new Task[]{
    Task.Factory.StartNew(FirstThread),
    Task.Factory.StartNew(SecondThread),
    Task.Factory.StartNew(ThirdThread)
};
Task.WaitAll(tasks);

或使用并行类

Action[] actions = new Action[] { 
    FirstThread,
    SecondThread,
    ThirdThread
};
Parallel.ForEach(actions, action => action());

对于方法内部的逻辑(FirstThread…),您可以实现相同的概念(如果对DTSXProcesser的相同实例并行执行ExecutePackage方法几次没有问题)。

如果你不知道该用哪一个,你可以看到这个问题,但它们几乎是等同的。

在。net 4.5和c# 5中,您可以使用async await关键字。