Example #1
0
 public DistributedResource ExecuteTask(int taskId, DistributedResource resource)
 {
     if (Disposed)
     {
         throw new ObjectDisposedException(this.ToString());
     }
     else
     {
         try
         {
             Logging.WriteLog("Request for executing task was received");
             TaskLibrary task       = TaskManager.Tasks[taskId];
             var         stream     = new MemoryStream(resource.Get());
             var         serializer = new DataContractSerializer(task.InputData);
             object      input      = null;
             input = serializer.ReadObject(stream);
             var                 process       = Activator.CreateInstance(task.Process);
             MethodInfo          method        = task.Process.GetMethod("Execute");
             object              executeResult = method.Invoke(process, new object[] { input });
             DistributedResource result        = null;
             lock (ResourceManager)
             {
                 result = ResourceManager.CreateDistributedResource(executeResult);
             }
             return(result);
         }
         catch
         {
             return(null);
         }
     }
 }
 public V Execute(T data)
 {
     if (!Disposed)
     {
         DividedResource dividedResource = DividedResourceManager.CreateDividedResource(data);
         try
         {
             List <DistributedComputingResult> distributedResults = null;
             try
             {
                 distributedResults = Task.ExecuteTask(dividedResource);
             }
             catch
             {
                 throw new NoServerConnectionException();
             }
             if (distributedResults == null)
             {
                 throw new TaskException();
             }
             List <V> results    = new List <V>();
             var      serializer = new DataContractSerializer(typeof(V));
             foreach (DistributedComputingResult distributedResult in distributedResults)
             {
                 bool read = false;
                 DistributedResource resource = distributedResult.Result;
                 while (!read)
                 {
                     try
                     {
                         byte[] array = resource.Get();
                         results.Add((V)serializer.ReadObject(new MemoryStream(array)));
                         distributedResult.Result.Dispose();
                         read = true;
                     }
                     catch (Exception e)
                     {
                         resource = Task.Execute(distributedResult.Data);
                         if (resource == null)
                         {
                             throw new NoServerConnectionException();
                         }
                     }
                 }
             }
             return(new Compiler().CompileResult(results));
         }
         finally
         {
             dividedResource.Dispose();
         }
     }
     else
     {
         throw new ObjectDisposedException(this.ToString());
     }
 }