A good friend of mine call me in a desperate mode because of an particular problem they have added some changes and now the package is failing because of a deadlock against some of the variables in the package.
 
After some thoughts I ask how he was typically adding the variables into the ReadWriteVariables like most users,  once he said that I said "Oh Nooo" even thought that made things simple is not always the best way to ensure deadblock will happen so. I said remove the variables from the ReadWriteVariables and modify your code using the below sample code:
 Variables var = null ;
         
           Dts.VariableDispenser.LockForWrite ("User::int_Sample1");
           Dts.VariableDispenser.LockForWrite ("User::int_Sample2");
           Dts.VariableDispenser.LockForWrite ("User::dt_today");
            Dts.VariableDispenser.GetVariables (ref var );
           var["User::int_Sample1"].Value = 1;
           var["User::int_Sample2"].Value = 2;
           var["User::dt_today"].Value = DateTime.Now;
           var.Unlock();
                 Dts.TaskResult = (int)ScriptResults.Success;
He was delighted, and I explain to him developers need to act like mechanics, we love the new tools, but, once in awhile look inside the engine to get your hands dirty... 
No comments:
Post a Comment