4

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

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

我听说过一个称为并行性的概念,它用于更高版本的 .Net Framework 4.0 等。但是我不确定如何在 Projcet 中实现它。

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

            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();
        }         

    }

请帮助...

4

1 回答 1

1

使用 .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没有问题)。ExecutePackageDTSXProcesser

如果您想知道使用哪一个,您可以看到这个问题,但它们几乎是等价的。

使用 .NET 4.5 和 C# 5,您可以使用async await关键字。

于 2013-06-06T09:40:46.273 回答