/// <summary> /// Sends /// </summary> /// <param name="destinationAddress"></param> /// <param name="message"></param> /// <param name="context"></param> /// <returns></returns> public async Task Send(string destinationAddress, TransportMessage message, ITransactionContext context) { // this timestamp will only be used in the file names of message files written to approach some kind // of global ordering - individual messages sent from this context will have sequence numbers on them // in addition to the timestamp var time = _rebusTime.Now; var outgoingMessages = context.GetOrAdd("file-system-transport-outgoing-messages", () => { var queue = new ConcurrentQueue <OutgoingMessage>(); context.OnCommitted(_ => SendOutgoingMessages(queue, time)); context.OnAborted(_ => AbortOutgoingMessages(queue)); return(queue); }); var outgoingMessage = await OutgoingMessage.WriteTemp(GetDirectory(destinationAddress), message); outgoingMessages.Enqueue(outgoingMessage); }