public long addNewTask(SetupWorkMessage message)
        {
            long ID = 0;
            ReduceResult[] answer;

            ID = GetNewID();

            if (message.distributeOption == DistributerOptions.NONE)
            {
                Assembly assembly = Assembly.Load(message.TheDLL);
                var type = typeof(IDistributer);
                var types = assembly.GetTypes().Where(x => type.IsAssignableFrom(x)).ToArray();
                IDistributer instanceOfMyType = (IDistributer)Activator.CreateInstance(types[0]);
                answer = instanceOfMyType.Distribute(message.Data);
            }
            else
            {
                IDistributer distributer = DistributerFactory.CreateDistributer<string>(message.distributeOption);
                answer = distributer.Distribute(message.Data);
            }
            TaskIdentifier[] finished = new TaskIdentifier[answer.Length];
            int counter = 0;
            foreach (var item in answer)
            {
                finished[counter++] = new TaskIdentifier { Completed = false, DataObject = item };
            }

            Monitor.Enter(tasks);
            try
            {
                this.tasks.Add(ID, new TaskInfoOriginal(ID, finished, message.TheDLL, message.ReturnIP, message.Port));
            }
            finally
            {
                Monitor.Exit(tasks);
            }

            return ID;
        }
 public TaskInfoSetup(long ID, TaskIdentifier[] task, byte[] WorkDll, string ReturnIP, int ReturnPort)
     : base(ID, WorkDll, ReturnIP, ReturnPort)
 {
     this.task = task;
 }