0
我嘗試等待,直到所有運行的包都在SQL Server上完成後,我開始了一個SSIS包,但我無法弄清楚正確的方法來做到這一點。我到目前爲止的代碼是:如何從SSIS服務器獲取運行包的集合?
var runningPackagesBefore = catalog.Executions.ToList();
// [..] logic to start the package
while (true)
{
// get all packages that are new
catalog.Executions.Refresh();
var newOperations = catalog.Executions.Except(runningPackagesBefore);
// get all packages that are new, running and are in the same folder and project as the package
var runningOperations =
newOperations.Where(
operation => operation.FolderName == catalogFolder.Name
&& operation.ProjectName == project.Name
&& operation.Status == Operation.ServerOperationStatus.Running);
if (!runningOperations.Any())
{
break;
}
// [..] sleep and timeout logic here
}
的catalog.Executions.Refresh()
調用導致死鎖有時問題。該文件還說「不要直接引用此方法...」。
需要刷新,因爲否則執行集合將被緩存並返回0個新事務。當它沒有死鎖運行時,它會正確返回正在運行的程序包數量。
所以我試圖找到一種方法,看看是否所有的軟件包都運行完畢。我正在運行的軟件包是一個「主」軟件包,用於啓動多個其他軟件包。否則,我可以簡單地獲取執行ID並從目錄中獲取操作狀態,但在這種情況下這是不可能的。