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()); } }
public List <DistributedComputingResult> ExecuteTask(DividedResource resource) { try { var service = RemoteConnection.CreateProxy <IServerTaskService>(Server); return(service.ExecuteTask(Client, Id, resource)); } catch { throw new NoServerConnectionException(); } }
public List <DistributedComputingResult> ExecuteTask(Uri clientUri, int taskId, DividedResource resource) { Logging.WriteLog("Request for executing task was received"); if (Server.Workers.Count == 0) { return(null); } List <TaskExecutor> executors = DistributingStrategy.Distribute(clientUri, resource.Resources, Server.Workers); var task = ExecuteTaskAsync(clientUri, taskId, executors, resource.Resources.Count); task.Wait(); var result = task.Result; return(result); }