public override async Task <bool> CompensateAsync(WorkLog item, IRoutingSlip routingSlip) { Guid tokenId = item.Result.WorkId; Guid cancelId = await PostCompensationEndpointAddress <Guid>(); Console.WriteLine("Compensate token {0} - confirmation Id: {1}.", tokenId, cancelId); return(true); }
private async Task ProcessForwardMessageAsync(IRoutingSlip routingSlip) { if (routingSlip.IsCompleted == false) { if (await routingSlip.ProcessNextAsync()) await this._send(routingSlip.ProgressUri, routingSlip); else await this._send(routingSlip.CompensationUri, routingSlip); } }
private async Task ProcessBackwardMessageAsync(IRoutingSlip routingSlip) { if (routingSlip.IsInProgress) { if (await routingSlip.UndoLastAsync()) await this._send(routingSlip.CompensationUri, routingSlip); else await this._send(routingSlip.ProgressUri, routingSlip); } }
private async Task SendAsync(Uri uri, IRoutingSlip routingSlip) { foreach (IHostProcess process in this._processHosts) { if (await process.AcceptMessageAsync(uri, routingSlip)) { break; } } }
public override async Task <bool> CompensateAsync(WorkLog item, IRoutingSlip routingSlip) { await Task.Delay(TimeSpan.FromSeconds(3)); Guid fileId = item.Result.WorkId; Guid cancelId = Guid.NewGuid(); Console.WriteLine("Compensate move file {0} - confirmation Id: {1}.", fileId, cancelId); return(true); }
public override async Task <bool> CompensateAsync(WorkLog item, IRoutingSlip routingSlip) { return(await Task.Run(() => { Guid fileId = item.Result.WorkId; Guid cancelId = Guid.NewGuid(); Console.WriteLine("Compensate send file {0} - confirmation Id: {1}.", fileId, cancelId); return true; })); }
public async Task<bool> AcceptMessageAsync(Uri uri, IRoutingSlip routingSlip) { TProcess process = new TProcess(); if (process.WorkItemEndpointAddress.Equals(uri)) { await this.ProcessForwardMessageAsync(routingSlip); return true; } if (!process.CompensationEndpointAddress.Equals(uri)) return false; await this.ProcessBackwardMessageAsync(routingSlip); return true; }
public abstract Task <bool> CompensateAsync(WorkLog item, IRoutingSlip routingSlip);
public Builder() { this._routingSlip = new RoutingSlip.RoutingSlip(); this._processHosts = new List <IHostProcess>(); }