public static FutureResult <T, E> Retry <T, E>(this FutureResult <T, E> t, int upTo) { return(new FutureResult <T, E>( new RunAction <T, E>( (callback) => { void tryFuture(FutureResult <T, E> f, int remaining) { void act(Result <T, E> result) { if (result.Successful.Item1) { callback(new Result <T, E>(result.Successful.Item2)); } else { if (remaining > 0) { Console.WriteLine($"Retry n: {upTo-remaining}"); Console.WriteLine(result.Failure.Item2); tryFuture(f, remaining - 1); } else { callback(new Result <T, E>(result.Failure.Item2)); } } } f.Run(act); } tryFuture(t, upTo); } ) )); }
private FutureResult <SqlWorkerResult> StartSqlAsyncWorker(CancellationToken token) { var worker = SqlAsyncWorker.Create(context.Services, upgradeMode.GetSqlWorkerTask(), token); return(workerResult = new AsyncFutureResult <SqlWorkerResult>(worker, UpgradeLog.Instance, context.Configuration.BuildInParallel)); }
private IDisposable StartSqlWorker() { var result = CreateResult(SqlWorker.Create(context.Services, upgradeMode.GetSqlWorkerTask())); workerResult = result; return(result); }
public ResultBase <string> MakeString(int count, char fillchar) { var future = new FutureResult <string>(); scheduler.Invoke(new MakeStringRequest(servant, future, count, fillchar)); return(future); }
void Start() { // Start the recolection of data from the web services _dataRetrievingFuture = BeginDataRetrieving(); _uiManager.ShowLoadingPanel(true); EnableCameraControls(false); }
void BeginModelDownload(FutureResult futureResult, string meshUri, string mtlUri, string textureUri) { _backendManager.DownloadFile(meshUri, (BackendRequestResult result, string filePath) => { if (result.Success) { _mapModelMeshPath = filePath; futureResult.CompletedActions.Add("GetMesh"); } else { if (!futureResult.Completed) { futureResult.Completed = true; futureResult.Success = false; futureResult.FailureReasons.Add("Failed to Download Mesh File: " + result.ErrorString); } } }); _backendManager.DownloadFile(mtlUri, (BackendRequestResult result, string filePath) => { if (result.Success) { _mapModelMtlPath = filePath; futureResult.CompletedActions.Add("GetMtl"); } else { if (!futureResult.Completed) { futureResult.Completed = true; futureResult.Success = false; futureResult.FailureReasons.Add("Failed to Download Mtl File: " + result.ErrorString); } } }); _backendManager.DownloadFile(textureUri, (BackendRequestResult result, string filePath) => { if (result.Success) { _mapModelTexturePath = filePath; futureResult.CompletedActions.Add("GetTexture"); } else { if (!futureResult.Completed) { futureResult.Completed = true; futureResult.Success = false; futureResult.FailureReasons.Add("Failed to Download Texture File: " + result.ErrorString); } } }); }
public static FutureResult <U, E> Map <T, U, E>(this FutureResult <T, E> t, Func <T, U> f, Func <E, E> e) { return(new FutureResult <U, E>( new RunAction <U, E>( (callback) => { void act(Result <T, E> result) => callback(result.Map(f, e)); t.Run(act); } ) )); }
private MessageDispatchException GetDispatchException(FutureResult <MessageDispatchInfo> futureResult) { var sourceEx = futureResult.Task.Exception.InnerException; if (sourceEx is MessageDispatchException dispatchEx) { return(dispatchEx); } return(new MessageDispatchException("Error calling message consumer.", futureResult.Invoker, sourceEx)); }
/// <summary> /// Constructor. /// </summary> /// <param name="futureResult">The future result containing the exception.</param> public EnricherException(FutureResult <IMessageEnricher> futureResult) { Check.NotNull(futureResult, nameof(futureResult)); var taskException = futureResult.Task.Exception; var sourceException = taskException.InnerException; Details = new Dictionary <string, object> { { "Message", sourceException?.Message }, { "Enricher", futureResult.Invoker.GetType().FullName } }; }
// Function that check if all the task are completed. // In this case there are always 6 tasks so the system waits that. // In case of an error the futureResult will be completed and this coroutine will stop. IEnumerator CheckDataRetrieveStatus(FutureResult futureResult) { while (!futureResult.Completed) { if (futureResult.CompletedActions.Count == 6) { futureResult.Completed = true; futureResult.Success = true; break; } yield return(null); } }
static void Main(string[] args) { ///////////////////////////////////////// // Declaración de servicios utilizados // ///////////////////////////////////////// SessionServices servicios = new SessionServices(); UXServices ux = new UXServices(); //////////////// // Parámetros // //////////////// Uri u1 = new Uri("http://example.com"); Uri u2 = new Uri("http://apple.com/"); FutureResult <int, Exception> wcFirstLink(Uri url) { return(servicios.get(url) .Map <byte[], Uri, Exception>(ux.ToUTF8.FlatThen(ux.FirstLink, null), null) .FlatMap(servicios.get) .Map <byte[], int, Exception>(ux.ToUTF8.FlatThen(ux.WordCounter, null).FlatThen(ux.UpTo, null), null)); } FutureResult <int, Exception> f1 = wcFirstLink(u1); FutureResult <int, Exception> f2 = wcFirstLink(u2); FutureResult <int, Exception> wow = Zip(f1, f2) .Map(ux.Sum, ux.Handler) .Map(ux.Trace, ux.Handler) .Map(ux.multiplier(13), ux.FlatHandler) .Retry(1000); wow.Run( res => { if (res.Successful.Item1) { Console.WriteLine(res.Successful.Item2); } else { Console.WriteLine(res.Failure.Item2); } } ); }
/// <summary> /// Publisher Exception. /// </summary> /// <param name="futureResult">The task and associated publisher.</param> public PublisherException(FutureResult <IMessagePublisher> futureResult) : base("Error Invoking Publishers.") { Check.NotNull(futureResult, nameof(futureResult)); var taskException = futureResult.Task.Exception; var sourceException = taskException.InnerException; Details = new Dictionary <string, object> { { "Message", sourceException?.Message }, { "Publisher", futureResult.Invoker.GetType().FullName } }; var dispatchException = sourceException as MessageDispatchException; if (dispatchException != null) { Details["DispatchDetails"] = dispatchException.Details; } }
public static FutureResult <U, E> FlatMap <T, U, E>(this FutureResult <T, E> t, Func <T, FutureResult <U, E> > f) { return(new FutureResult <U, E>( new RunAction <U, E>( (callback) => { void act(Result <T, E> result) { if (result.Successful.Item1) { f(result.Successful.Item2).Run(callback); } else { callback(new Result <U, E>(result.Failure.Item2)); } } t.Run(act); } ) )); }
public bool HasResult(out FutureResult <TCommand, RoutingSlipCompleted, TResult> result) { result = _result; return(result != null); }
public MakeStringRequest(Servant servant, FutureResult <string> future, int count, char fillchar) : base(servant, future) { this.count = count; this.fillchar = fillchar; }
protected MethodRequest(Servant servant, FutureResult <T> future) { this.servant = servant; this.future = future; }
// Class that will start the process of getting all the data from the web services. FutureResult BeginDataRetrieving() { var futureResult = new FutureResult(); // GetModel Data and then download the files. _backendManager.GetModelInfo((BackendRequestResult result, GetModelResponse response) => { if (result.Success) { futureResult.CompletedActions.Add("GetModelInfo"); BeginModelDownload(futureResult, response.ObjUrl, response.MtlUrl, response.TextureUrl); } else { if (!futureResult.Completed) { futureResult.Completed = true; futureResult.Success = false; futureResult.FailureReasons.Add("Failed To Get Model Info"); } } }); // Get the shovel data _backendManager.GetShovels((BackendRequestResult result, GetShovelsResponse response) => { if (result.Success) { futureResult.CompletedActions.Add("GetShovels"); _shovels.Clear(); _shovels.AddRange(response.Shovels); } else { if (!futureResult.Completed) { futureResult.Completed = true; futureResult.Success = false; futureResult.FailureReasons.Add("Failed To Get Shovels"); } } }); // Get the shovel report data _backendManager.GetShovelInfo((BackendRequestResult result, GetShovelInfoResponse response) => { if (result.Success) { futureResult.CompletedActions.Add("GetShovelInfo"); _shovelReports.Clear(); _shovelReports.AddRange(response.Reports); } else { if (!futureResult.Completed) { futureResult.Completed = true; futureResult.Success = false; futureResult.FailureReasons.Add("Failed To Get Shovel Reports"); } } }); StartCoroutine(CheckDataRetrieveStatus(futureResult)); return(futureResult); }
public FutureResultConfigurator(FutureResult <TCommand, TInput, TResult> result) { _result = result; }