/// <summary> /// Gets due messages as of now, given the approximate due time that they were stored with when <see cref="ITimeoutManager.Defer"/> was called /// </summary> public async Task<DueMessagesResult> GetDueMessages() { lock (_deferredMessages) { var keyValuePairsToRemove = _deferredMessages .Where(v => RebusTime.Now >= v.Value.DueTime) .ToHashSet(); var result = new DueMessagesResult(keyValuePairsToRemove .Select(kvp => new DueMessage(kvp.Value.Headers, kvp.Value.Body, () => keyValuePairsToRemove.Remove(kvp))), () => { // put back if the result was not completed foreach (var kvp in keyValuePairsToRemove) { _deferredMessages[kvp.Key] = kvp.Value; } }); foreach (var kvp in keyValuePairsToRemove) { DeferredMessage _; _deferredMessages.TryRemove(kvp.Key, out _); } return result; } }
public async Task <DueMessagesResult> GetDueMessages() { lock (_deferredMessages) { var keyValuePairsToRemove = _deferredMessages .Where(v => RebusTime.Now >= v.Value.DueTime) .ToHashSet(); var result = new DueMessagesResult(keyValuePairsToRemove .Select(kvp => new DueMessage(kvp.Value.Headers, kvp.Value.Body, () => keyValuePairsToRemove.Remove(kvp))), () => { // put back if the result was not completed foreach (var kvp in keyValuePairsToRemove) { _deferredMessages[kvp.Key] = kvp.Value; } }); foreach (var kvp in keyValuePairsToRemove) { DeferredMessage _; _deferredMessages.TryRemove(kvp.Key, out _); } return(result); } }
/// <summary> /// Gets due messages as of now, given the approximate due time that they were stored with when <see cref="ITimeoutManager.Defer"/> was called /// </summary> public Task <DueMessagesResult> GetDueMessages() { lock (_deferredMessages) { #if NETSTANDARD2_0 var keyValuePairsToRemove = EnumerableExtensions.ToHashSet(_deferredMessages .Where(v => _rebusTime.Now >= v.Value.DueTime)); #else var keyValuePairsToRemove = System.Linq.Enumerable.ToHashSet(_deferredMessages .Where(v => _rebusTime.Now >= v.Value.DueTime)); #endif var result = new DueMessagesResult(keyValuePairsToRemove .Select(kvp => { var dueMessage = new DueMessage(kvp.Value.Headers, kvp.Value.Body, () => { keyValuePairsToRemove.Remove(kvp); return(Task.CompletedTask); }); return(dueMessage); }), () => { // put back if the result was not completed foreach (var kvp in keyValuePairsToRemove) { _deferredMessages[kvp.Key] = kvp.Value; Interlocked.Increment(ref DueCount); } return(Task.CompletedTask); }); foreach (var kvp in keyValuePairsToRemove) { if (_deferredMessages.TryRemove(kvp.Key, out var _)) { Interlocked.Decrement(ref DueCount); } } return(Task.FromResult(result)); } }
public async Task<DueMessagesResult> GetDueMessages() { var now = RebusTime.Now.UtcDateTime; DueMessagesResult dueMessagesResult; using (var session = _documentStore.OpenAsyncSession()) { var timeouts = await session.Query<Timeout, TimeoutIndex>() .Customize(x => x.WaitForNonStaleResults(TimeSpan.FromSeconds(10))) .Where(x => x.DueTimeUtc <= now) .ToListAsync(); var dueMessages = timeouts.Select(x => new DueMessage(x.Headers, x.Body, CreateCleanUpProcedure(x.Id))); dueMessagesResult = new DueMessagesResult(dueMessages); } return dueMessagesResult; }
public async Task <DueMessagesResult> GetDueMessages() { var now = RebusTime.Now.UtcDateTime; DueMessagesResult dueMessagesResult; using (var session = _documentStore.OpenAsyncSession()) { var timeouts = await session.Query <Timeout, TimeoutIndex>() .Customize(x => x.WaitForNonStaleResults(TimeSpan.FromSeconds(10))) .Where(x => x.DueTimeUtc <= now) .ToListAsync(); var dueMessages = timeouts.Select(x => new DueMessage(x.Headers, x.Body, CreateCleanUpProcedure(x.Id))); dueMessagesResult = new DueMessagesResult(dueMessages); } return(dueMessagesResult); }