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()); } }