public ASyncThreadWorkData(IThreadWorkerObject[] workerObjects, bool safeMode, int maxWorkingThreads = -1)
        {
            bool flag = workerObjects == null;

            if (!flag)
            {
                this.workerPackages = new ThreadWorkStatePackage[workerObjects.Length];
                int num = workerObjects.Length;
                while (true)
                {
                    int num2 = num - 1;
                    num = num2;
                    if (num2 <= -1)
                    {
                        break;
                    }
                    ThreadWorkStatePackage threadWorkStatePackage = new ThreadWorkStatePackage();
                    threadWorkStatePackage.waitHandle   = new AutoResetEvent(false);
                    threadWorkStatePackage.workerObject = workerObjects[num];
                    threadWorkStatePackage.safeMode     = safeMode;
                    this.workerPackages[num]            = threadWorkStatePackage;
                }
                bool flag2 = maxWorkingThreads <= 0;
                if (flag2)
                {
                    maxWorkingThreads = Mathf.Max(SystemInfo.processorCount - 1, 1);
                }
                else
                {
                    this.maxWorkingThreads = maxWorkingThreads;
                }
            }
        }
Beispiel #2
0
        public ASyncThreadWorkData(IThreadWorkerObject[] workerObjects, bool safeMode, int maxWorkingThreads = -1)
        {
            if (workerObjects == null)
            {
                return;
            }

            workerPackages = new ThreadWorkStatePackage[workerObjects.Length];

            int i = workerObjects.Length;

            while (--i > -1)
            {
                ThreadWorkStatePackage package = new ThreadWorkStatePackage();
                package.waitHandle   = new AutoResetEvent(false);
                package.workerObject = workerObjects[i];
                package.safeMode     = safeMode;
                workerPackages[i]    = package;
            }

            if (maxWorkingThreads <= 0)
            {
                maxWorkingThreads = Mathf.Max(SystemInfo.processorCount - 1, 1);
            }
            else
            {
                this.maxWorkingThreads = maxWorkingThreads;
            }
        }
        public ASyncThreadWorkData(IThreadWorkerObject[] workerObjects, bool safeMode, int maxWorkingThreads = -1)
        {
            if (workerObjects == null)
                return;

            workerPackages = new ThreadWorkStatePackage[workerObjects.Length];

            int i = workerObjects.Length;
            while (--i > -1)
            {
                ThreadWorkStatePackage package = new ThreadWorkStatePackage();
                package.waitHandle = new AutoResetEvent(false);
                package.workerObject = workerObjects[i];
                package.safeMode = safeMode;
                workerPackages[i] = package;
            }

            if (maxWorkingThreads <= 0)
            {
                maxWorkingThreads = Mathf.Max(SystemInfo.processorCount - 1, 1);
            }
            else
            {
                this.maxWorkingThreads = maxWorkingThreads;
            }
        }
        public void Dispose()
        {
            bool flag = this.workerPackages != null;

            if (flag)
            {
                ThreadWorkStatePackage[] array = this.workerPackages;
                for (int i = 0; i < array.Length; i++)
                {
                    ThreadWorkStatePackage threadWorkStatePackage = array[i];
                    bool flag2 = threadWorkStatePackage.waitHandle != null;
                    if (flag2)
                    {
                        threadWorkStatePackage.waitHandle.Close();
                    }
                    threadWorkStatePackage.waitHandle   = null;
                    threadWorkStatePackage.workerObject = null;
                }
            }
            this.workerPackages = null;
        }