在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();
}
}
与。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
关键字。