diff --git a/src/Foundatio.MetricsNET/MetricsNETClient.cs b/src/Foundatio.MetricsNET/MetricsNETClient.cs index ba95d18f7..8d5ebe36b 100644 --- a/src/Foundatio.MetricsNET/MetricsNETClient.cs +++ b/src/Foundatio.MetricsNET/MetricsNETClient.cs @@ -8,17 +8,17 @@ namespace Foundatio.Metrics { public class MetricsNETClient : IMetricsClient { public Task CounterAsync(string name, int value = 1) { Metric.Counter(name, Unit.None).Increment(); - return TaskHelper.Completed; + return Task.CompletedTask; } public Task GaugeAsync(string name, double value) { Metric.Gauge(name, () => value, Unit.None); - return TaskHelper.Completed; + return Task.CompletedTask; } public Task TimerAsync(string name, int milliseconds) { Metric.Timer(name, Unit.Calls, SamplingType.SlidingWindow, TimeUnit.Milliseconds).Record(milliseconds, TimeUnit.Milliseconds); - return TaskHelper.Completed; + return Task.CompletedTask; } public void Dispose() {} diff --git a/src/Foundatio.Redis/Queues/RedisQueue.cs b/src/Foundatio.Redis/Queues/RedisQueue.cs index a6b152192..3cf05ef31 100644 --- a/src/Foundatio.Redis/Queues/RedisQueue.cs +++ b/src/Foundatio.Redis/Queues/RedisQueue.cs @@ -79,7 +79,7 @@ public RedisQueue(ConnectionMultiplexer connection, ISerializer serializer = nul _logger.Trace("Queue {0} created. Retries: {1} Retry Delay: {2}", QueueId, _retries, _retryDelay.ToString()); } - protected override Task EnsureQueueCreatedAsync(CancellationToken cancellationToken = new CancellationToken()) => TaskHelper.Completed; + protected override Task EnsureQueueCreatedAsync(CancellationToken cancellationToken = new CancellationToken()) => Task.CompletedTask; private async Task EnsureMaintenanceRunningAsync() { if (!_runMaintenanceTasks || _maintenanceTask != null) diff --git a/src/Foundatio/Caching/InMemoryCacheClient.cs b/src/Foundatio/Caching/InMemoryCacheClient.cs index 0b6e4de14..5a586c8d7 100644 --- a/src/Foundatio/Caching/InMemoryCacheClient.cs +++ b/src/Foundatio/Caching/InMemoryCacheClient.cs @@ -36,7 +36,7 @@ protected virtual async Task OnItemExpiredAsync(string key) { Key = key }; - await (ItemExpired?.InvokeAsync(this, args) ?? TaskHelper.Completed).AnyContext(); + await (ItemExpired?.InvokeAsync(this, args) ?? Task.CompletedTask).AnyContext(); } public ICollection Keys { @@ -57,7 +57,7 @@ public Task RemoveAllAsync(IEnumerable keys = null) { } if (!keys.Any()) - return TaskHelper.FromResult(0); + return Task.FromResult(0); int removed = 0; foreach (var key in keys) { diff --git a/src/Foundatio/Jobs/WorkItemJob/WorkItemHandlers.cs b/src/Foundatio/Jobs/WorkItemJob/WorkItemHandlers.cs index 690954d61..43d618093 100644 --- a/src/Foundatio/Jobs/WorkItemJob/WorkItemHandlers.cs +++ b/src/Foundatio/Jobs/WorkItemJob/WorkItemHandlers.cs @@ -88,7 +88,7 @@ public DelegateWorkItemHandler(Func handler, ILogger logg public override Task HandleItemAsync(WorkItemContext context) { if (_handler == null) - return TaskHelper.Completed; + return Task.CompletedTask; return _handler(context); } diff --git a/src/Foundatio/Lock/ILockProvider.cs b/src/Foundatio/Lock/ILockProvider.cs index 1279b544d..f1b95ef0a 100644 --- a/src/Foundatio/Lock/ILockProvider.cs +++ b/src/Foundatio/Lock/ILockProvider.cs @@ -83,7 +83,7 @@ public static async Task TryUsingAsync(this ILockProvider locker, string n public static Task TryUsingAsync(this ILockProvider locker, string name, Action work, TimeSpan? lockTimeout = null, TimeSpan? acquireTimeout = null) { return locker.TryUsingAsync(name, () => { work(); - return TaskHelper.Completed; + return Task.CompletedTask; }, lockTimeout, acquireTimeout); } } diff --git a/src/Foundatio/Lock/ThrottlingLockProvider.cs b/src/Foundatio/Lock/ThrottlingLockProvider.cs index bb2d49c4b..3ee4098b7 100644 --- a/src/Foundatio/Lock/ThrottlingLockProvider.cs +++ b/src/Foundatio/Lock/ThrottlingLockProvider.cs @@ -99,12 +99,12 @@ public async Task IsLockedAsync(string name) { public Task ReleaseAsync(string name) { _logger.Trace("ReleaseAsync: {0}", name); - return TaskHelper.Completed; + return Task.CompletedTask; } public Task RenewAsync(String name, TimeSpan? lockExtension = null) { _logger.Trace("RenewAsync: {0}", name); - return TaskHelper.Completed; + return Task.CompletedTask; } private string GetCacheKey(string name, DateTime now) { diff --git a/src/Foundatio/Messaging/IMessageSubscriber.cs b/src/Foundatio/Messaging/IMessageSubscriber.cs index 47faf80b7..c79850ea4 100644 --- a/src/Foundatio/Messaging/IMessageSubscriber.cs +++ b/src/Foundatio/Messaging/IMessageSubscriber.cs @@ -16,7 +16,7 @@ public static class MessageBusExtensions { public static void Subscribe(this IMessageSubscriber subscriber, Action handler, CancellationToken cancellationToken = default(CancellationToken)) where T : class { subscriber.Subscribe((msg, token) => { handler(msg); - return TaskHelper.Completed; + return Task.CompletedTask; }, cancellationToken); } } diff --git a/src/Foundatio/Messaging/InMemoryMessageBus.cs b/src/Foundatio/Messaging/InMemoryMessageBus.cs index efba36cb4..d53e6c3fc 100644 --- a/src/Foundatio/Messaging/InMemoryMessageBus.cs +++ b/src/Foundatio/Messaging/InMemoryMessageBus.cs @@ -11,13 +11,13 @@ public InMemoryMessageBus(ILoggerFactory loggerFactory = null) : base(loggerFact public override Task PublishAsync(Type messageType, object message, TimeSpan? delay = null, CancellationToken cancellationToken = default(CancellationToken)) { if (message == null) - return TaskHelper.Completed; + return Task.CompletedTask; if (delay.HasValue && delay.Value > TimeSpan.Zero) return AddDelayedMessageAsync(messageType, message, delay.Value); Task.Run(async () => await SendMessageToSubscribersAsync(messageType, message.Copy()).AnyContext()); - return TaskHelper.Completed; + return Task.CompletedTask; } } } \ No newline at end of file diff --git a/src/Foundatio/Messaging/MessageBusBase.cs b/src/Foundatio/Messaging/MessageBusBase.cs index 6a809af15..588d6163f 100644 --- a/src/Foundatio/Messaging/MessageBusBase.cs +++ b/src/Foundatio/Messaging/MessageBusBase.cs @@ -75,7 +75,7 @@ protected Task AddDelayedMessageAsync(Type messageType, object message, TimeSpan }); ScheduleNextMaintenance(sendTime); - return TaskHelper.Completed; + return Task.CompletedTask; } protected override async Task DoMaintenanceAsync() { diff --git a/src/Foundatio/Metrics/CacheBucketMetricsClientBase.cs b/src/Foundatio/Metrics/CacheBucketMetricsClientBase.cs index b8b3a4577..7de2cb80b 100644 --- a/src/Foundatio/Metrics/CacheBucketMetricsClientBase.cs +++ b/src/Foundatio/Metrics/CacheBucketMetricsClientBase.cs @@ -43,7 +43,7 @@ public Task CounterAsync(string name, int value = 1) { _queue.Enqueue(entry); - return TaskHelper.Completed; + return Task.CompletedTask; } public Task GaugeAsync(string name, double value) { @@ -54,7 +54,7 @@ public Task GaugeAsync(string name, double value) { _queue.Enqueue(entry); - return TaskHelper.Completed; + return Task.CompletedTask; } public Task TimerAsync(string name, int milliseconds) { @@ -65,7 +65,7 @@ public Task TimerAsync(string name, int milliseconds) { _queue.Enqueue(entry); - return TaskHelper.Completed; + return Task.CompletedTask; } private void OnMetricsTimer(object state) { @@ -204,7 +204,7 @@ private async Task StoreTimingAsync(string name, DateTime time, int count, int t } public Task WaitForCounterAsync(string statName, long count = 1, TimeSpan? timeout = null) { - return WaitForCounterAsync(statName, () => TaskHelper.Completed, count, timeout.ToCancellationToken(TimeSpan.FromSeconds(10))); + return WaitForCounterAsync(statName, () => Task.CompletedTask, count, timeout.ToCancellationToken(TimeSpan.FromSeconds(10))); } public async Task WaitForCounterAsync(string statName, Func work, long count = 1, CancellationToken cancellationToken = default(CancellationToken)) { diff --git a/src/Foundatio/Metrics/NullMetricsClient.cs b/src/Foundatio/Metrics/NullMetricsClient.cs index 970871596..9c70131b9 100644 --- a/src/Foundatio/Metrics/NullMetricsClient.cs +++ b/src/Foundatio/Metrics/NullMetricsClient.cs @@ -7,15 +7,15 @@ public class NullMetricsClient : IMetricsClient { public static readonly IMetricsClient Instance = new NullMetricsClient(); public Task CounterAsync(string name, int value = 1) { - return TaskHelper.Completed; + return Task.CompletedTask; } public Task GaugeAsync(string name, double value) { - return TaskHelper.Completed; + return Task.CompletedTask; } public Task TimerAsync(string name, int milliseconds) { - return TaskHelper.Completed; + return Task.CompletedTask; } public void Dispose() {} diff --git a/src/Foundatio/Metrics/StatsDMetricsClient.cs b/src/Foundatio/Metrics/StatsDMetricsClient.cs index 7471547b6..8b1523562 100644 --- a/src/Foundatio/Metrics/StatsDMetricsClient.cs +++ b/src/Foundatio/Metrics/StatsDMetricsClient.cs @@ -25,17 +25,17 @@ public StatsDMetricsClient(string serverName = "127.0.0.1", int port = 8125, str public Task CounterAsync(string name, int value = 1) { Send(BuildMetric("c", name, value.ToString(CultureInfo.InvariantCulture))); - return TaskHelper.Completed; + return Task.CompletedTask; } public Task GaugeAsync(string name, double value) { Send(BuildMetric("g", name, value.ToString(CultureInfo.InvariantCulture))); - return TaskHelper.Completed; + return Task.CompletedTask; } public Task TimerAsync(string name, int milliseconds) { Send(BuildMetric("ms", name, milliseconds.ToString(CultureInfo.InvariantCulture))); - return TaskHelper.Completed; + return Task.CompletedTask; } private string BuildMetric(string type, string statName, string value) { diff --git a/src/Foundatio/Queues/InMemoryQueue.cs b/src/Foundatio/Queues/InMemoryQueue.cs index a25aa8ff9..2c4693dd3 100644 --- a/src/Foundatio/Queues/InMemoryQueue.cs +++ b/src/Foundatio/Queues/InMemoryQueue.cs @@ -44,7 +44,7 @@ public InMemoryQueue(int retries = 2, TimeSpan? retryDelay = null, int[] retryMu } protected override Task EnsureQueueCreatedAsync(CancellationToken cancellationToken = new CancellationToken()) { - return TaskHelper.Completed; + return Task.CompletedTask; } protected override Task GetQueueStatsImplAsync() { @@ -243,7 +243,7 @@ public override Task DeleteQueueAsync() { _abandonedCount = 0; _workerErrorCount = 0; - return TaskHelper.Completed; + return Task.CompletedTask; } protected override async Task DoMaintenanceAsync() { diff --git a/src/Foundatio/Queues/QueueBase.cs b/src/Foundatio/Queues/QueueBase.cs index ad51574b0..d87896eef 100644 --- a/src/Foundatio/Queues/QueueBase.cs +++ b/src/Foundatio/Queues/QueueBase.cs @@ -78,7 +78,7 @@ protected virtual async Task OnEnqueuingAsync(T data) { Data = data }; - await (Enqueuing?.InvokeAsync(this, args) ?? TaskHelper.Completed).AnyContext(); + await (Enqueuing?.InvokeAsync(this, args) ?? Task.CompletedTask).AnyContext(); return !args.Cancel; } @@ -88,7 +88,7 @@ protected virtual async Task OnEnqueuedAsync(IQueueEntry entry) { await (Enqueued?.InvokeAsync(this, new EnqueuedEventArgs { Queue = this, Entry = entry - }) ?? TaskHelper.Completed).AnyContext(); + }) ?? Task.CompletedTask).AnyContext(); } public AsyncEvent> Dequeued { get; } = new AsyncEvent>(true); @@ -97,7 +97,7 @@ protected virtual async Task OnDequeuedAsync(IQueueEntry entry) { await (Dequeued?.InvokeAsync(this, new DequeuedEventArgs { Queue = this, Entry = entry - }) ?? TaskHelper.Completed).AnyContext(); + }) ?? Task.CompletedTask).AnyContext(); } public AsyncEvent> LockRenewed { get; } = new AsyncEvent>(true); @@ -106,7 +106,7 @@ protected virtual async Task OnLockRenewedAsync(IQueueEntry entry) { await (LockRenewed?.InvokeAsync(this, new LockRenewedEventArgs { Queue = this, Entry = entry - }) ?? TaskHelper.Completed).AnyContext(); + }) ?? Task.CompletedTask).AnyContext(); } public AsyncEvent> Completed { get; } = new AsyncEvent>(true); @@ -119,7 +119,7 @@ protected virtual async Task OnCompletedAsync(IQueueEntry entry) { await (Completed?.InvokeAsync(this, new CompletedEventArgs { Queue = this, Entry = entry - }) ?? TaskHelper.Completed).AnyContext(); + }) ?? Task.CompletedTask).AnyContext(); } public AsyncEvent> Abandoned { get; } = new AsyncEvent>(true); @@ -132,7 +132,7 @@ protected virtual async Task OnAbandonedAsync(IQueueEntry entry) { await (Abandoned?.InvokeAsync(this, new AbandonedEventArgs { Queue = this, Entry = entry - }) ?? TaskHelper.Completed).AnyContext(); + }) ?? Task.CompletedTask).AnyContext(); } public string QueueId { get; protected set; } diff --git a/src/Foundatio/Queues/QueueBehaviour.cs b/src/Foundatio/Queues/QueueBehaviour.cs index e4d868e21..fb88697e5 100644 --- a/src/Foundatio/Queues/QueueBehaviour.cs +++ b/src/Foundatio/Queues/QueueBehaviour.cs @@ -24,27 +24,27 @@ public virtual void Attach(IQueue queue) { } protected virtual Task OnEnqueuing(object sender, EnqueuingEventArgs enqueuingEventArgs) { - return TaskHelper.Completed; + return Task.CompletedTask; } protected virtual Task OnEnqueued(object sender, EnqueuedEventArgs enqueuedEventArgs) { - return TaskHelper.Completed; + return Task.CompletedTask; } protected virtual Task OnDequeued(object sender, DequeuedEventArgs dequeuedEventArgs) { - return TaskHelper.Completed; + return Task.CompletedTask; } protected virtual Task OnLockRenewed(object sender, LockRenewedEventArgs dequeuedEventArgs) { - return TaskHelper.Completed; + return Task.CompletedTask; } protected virtual Task OnCompleted(object sender, CompletedEventArgs completedEventArgs) { - return TaskHelper.Completed; + return Task.CompletedTask; } protected virtual Task OnAbandoned(object sender, AbandonedEventArgs abandonedEventArgs) { - return TaskHelper.Completed; + return Task.CompletedTask; } public void Dispose() { diff --git a/src/Foundatio/Utility/AsyncEvent.cs b/src/Foundatio/Utility/AsyncEvent.cs index f0e61d219..00715e2f4 100644 --- a/src/Foundatio/Utility/AsyncEvent.cs +++ b/src/Foundatio/Utility/AsyncEvent.cs @@ -27,7 +27,7 @@ public IDisposable AddHandler(Func callback) { public IDisposable AddSyncHandler(Action callback) { return AddHandler((sender, args) => { callback(sender, args); - return TaskHelper.Completed; + return Task.CompletedTask; }); } diff --git a/src/Foundatio/Utility/EmptyDisposable.cs b/src/Foundatio/Utility/EmptyDisposable.cs index 2264997bd..96f7bf111 100644 --- a/src/Foundatio/Utility/EmptyDisposable.cs +++ b/src/Foundatio/Utility/EmptyDisposable.cs @@ -9,15 +9,15 @@ public void Dispose() {} public class EmptyLock : ILock { public Task DisposeAsync() { - return TaskHelper.Completed; + return Task.CompletedTask; } public Task RenewAsync(TimeSpan? lockExtension = null) { - return TaskHelper.Completed; + return Task.CompletedTask; } public Task ReleaseAsync() { - return TaskHelper.Completed; + return Task.CompletedTask; } } diff --git a/src/Foundatio/Utility/IAsyncDisposable.cs b/src/Foundatio/Utility/IAsyncDisposable.cs index 60d5772d6..15775e28f 100644 --- a/src/Foundatio/Utility/IAsyncDisposable.cs +++ b/src/Foundatio/Utility/IAsyncDisposable.cs @@ -35,14 +35,14 @@ public static Task Using(TResource resource, Func body) where T public static Task Using(TResource resource, Action body) where TResource : IAsyncDisposable { return Using(resource, r => { body(); - return TaskHelper.Completed; + return Task.CompletedTask; }); } public static Task Using(TResource resource, Func body) where TResource : IAsyncDisposable { return Using(resource, async r => { await body(resource).AnyContext(); - return TaskHelper.Completed; + return Task.CompletedTask; }); } diff --git a/src/Foundatio/Utility/Run.cs b/src/Foundatio/Utility/Run.cs index 99092357b..8f91567e6 100644 --- a/src/Foundatio/Utility/Run.cs +++ b/src/Foundatio/Utility/Run.cs @@ -21,7 +21,7 @@ public static Task InParallel(int iterations, Func work) { public static async Task WithRetriesAsync(Func action, int maxAttempts = 5, TimeSpan? retryInterval = null, CancellationToken cancellationToken = default(CancellationToken), ILogger logger = null) { await WithRetriesAsync(async () => { await action().AnyContext(); - return TaskHelper.Completed; + return Task.CompletedTask; }, maxAttempts, retryInterval, cancellationToken, logger).AnyContext(); } diff --git a/src/Foundatio/Utility/TaskHelper.cs b/src/Foundatio/Utility/TaskHelper.cs deleted file mode 100644 index b2727bfd2..000000000 --- a/src/Foundatio/Utility/TaskHelper.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using System.Threading.Tasks; - -namespace Foundatio.Utility { - public static class TaskHelper { - public static Task Completed { get; } = FromResult(new AsyncVoid()); - - public static Task FromResult(TResult result) { - var completionSource = new TaskCompletionSource(); - completionSource.SetResult(result); - return completionSource.Task; - } - - [StructLayout(LayoutKind.Sequential, Size = 1)] - private struct AsyncVoid {} - } -} diff --git a/test/Foundatio.Tests/Logging/LoggingTests.cs b/test/Foundatio.Tests/Logging/LoggingTests.cs index 3c83f450a..6b8d16dc2 100644 --- a/test/Foundatio.Tests/Logging/LoggingTests.cs +++ b/test/Foundatio.Tests/Logging/LoggingTests.cs @@ -61,7 +61,7 @@ public void LogException() { private Task BlahAsync(ILogger logger) { logger.Info("Task hello"); - return TaskHelper.Completed; + return Task.CompletedTask; } } } diff --git a/test/Foundatio.Tests/Queue/QueueTestBase.cs b/test/Foundatio.Tests/Queue/QueueTestBase.cs index 6e5331f4c..68ee9afd0 100644 --- a/test/Foundatio.Tests/Queue/QueueTestBase.cs +++ b/test/Foundatio.Tests/Queue/QueueTestBase.cs @@ -356,7 +356,7 @@ public virtual async Task CanAutoCompleteWorker() { var resetEvent = new AsyncManualResetEvent(false); await queue.StartWorkingAsync(w => { Assert.Equal("Hello", w.Value.Data); - return TaskHelper.Completed; + return Task.CompletedTask; }, true); queue.Completed.AddSyncHandler((s, e) => { resetEvent.Set(); @@ -489,7 +489,7 @@ public virtual async Task CanRunWorkItemWithMetrics() { var queue = new InMemoryQueue(behaviors: new[] { behavior }, loggerFactory: Log); queue.Completed.AddHandler((sender, e) => { completedCount++; - return TaskHelper.Completed; + return Task.CompletedTask; }); _logger.Trace("Before enqueue");