From e6d161e0b4f430de840acfd95b4829ebb4c81942 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 6 Jun 2023 17:47:00 +0800 Subject: [PATCH] Enable nullable annotations for Volo.Abp.Threading --- .../Volo.Abp.Threading.csproj | 2 + .../Volo/Abp/Linq/AsyncQueryableExecuter.cs | 122 ++++++++++++------ .../Volo/Abp/Linq/IAsyncQueryableExecuter.cs | 20 +-- .../Volo/Abp/Linq/IAsyncQueryableProvider.cs | 20 +-- .../Volo/Abp/Threading/AbpAsyncTimer.cs | 2 +- .../Volo/Abp/Threading/AbpTimer.cs | 4 +- .../AmbientDataContextAmbientScopeProvider.cs | 13 +- .../Threading/AsyncLocalAmbientDataContext.cs | 10 +- .../AsyncLocalSimpleScopeExtensions.cs | 4 +- .../CancellationTokenProviderBase.cs | 2 +- .../Volo/Abp/Threading/IAmbientDataContext.cs | 4 +- .../Abp/Threading/IAmbientScopeProvider.cs | 2 +- 12 files changed, 126 insertions(+), 79 deletions(-) diff --git a/framework/src/Volo.Abp.Threading/Volo.Abp.Threading.csproj b/framework/src/Volo.Abp.Threading/Volo.Abp.Threading.csproj index 70f9ecb0f8..2197766f6b 100644 --- a/framework/src/Volo.Abp.Threading/Volo.Abp.Threading.csproj +++ b/framework/src/Volo.Abp.Threading/Volo.Abp.Threading.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.Threading Volo.Abp.Threading $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs index b6f4600caf..108d3bb595 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs @@ -17,7 +17,7 @@ public class AsyncQueryableExecuter : IAsyncQueryableExecuter, ISingletonDepende Providers = providers; } - protected virtual IAsyncQueryableProvider FindProvider(IQueryable queryable) + protected virtual IAsyncQueryableProvider? FindProvider(IQueryable queryable) { return Providers.FirstOrDefault(p => p.CanExecute(queryable)); } @@ -102,21 +102,29 @@ public class AsyncQueryableExecuter : IAsyncQueryableExecuter, ISingletonDepende : Task.FromResult(queryable.First(predicate)); } - public Task FirstOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task FirstOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); - return provider != null - ? provider.FirstOrDefaultAsync(queryable, cancellationToken) - : Task.FromResult(queryable.FirstOrDefault()); + + if (provider != null) + { + return provider.FirstOrDefaultAsync(queryable, cancellationToken); + } + + return Task.FromResult(queryable.FirstOrDefault())!; } - public Task FirstOrDefaultAsync(IQueryable queryable, Expression> predicate, + public Task FirstOrDefaultAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); - return provider != null - ? provider.FirstOrDefaultAsync(queryable, predicate, cancellationToken) - : Task.FromResult(queryable.FirstOrDefault(predicate)); + + if (provider != null) + { + return provider.FirstOrDefaultAsync(queryable, predicate, cancellationToken); + } + + return Task.FromResult(queryable.FirstOrDefault(predicate))!; } public Task LastAsync(IQueryable queryable, CancellationToken cancellationToken = default) @@ -135,21 +143,29 @@ public class AsyncQueryableExecuter : IAsyncQueryableExecuter, ISingletonDepende : Task.FromResult(queryable.Last(predicate)); } - public Task LastOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task LastOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); - return provider != null - ? provider.LastOrDefaultAsync(queryable, cancellationToken) - : Task.FromResult(queryable.LastOrDefault()); + + if (provider != null) + { + return provider.LastOrDefaultAsync(queryable, cancellationToken); + } + + return Task.FromResult(queryable.LastOrDefault())!; } - public Task LastOrDefaultAsync(IQueryable queryable, Expression> predicate, + public Task LastOrDefaultAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); - return provider != null - ? provider.LastOrDefaultAsync(queryable, predicate, cancellationToken) - : Task.FromResult(queryable.LastOrDefault(predicate)); + + if (provider != null) + { + return provider.LastOrDefaultAsync(queryable, predicate, cancellationToken); + } + + return Task.FromResult(queryable.LastOrDefault(predicate))!; } public Task SingleAsync(IQueryable queryable, CancellationToken cancellationToken = default) @@ -168,53 +184,77 @@ public class AsyncQueryableExecuter : IAsyncQueryableExecuter, ISingletonDepende : Task.FromResult(queryable.Single(predicate)); } - public Task SingleOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task SingleOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); - return provider != null - ? provider.SingleOrDefaultAsync(queryable, cancellationToken) - : Task.FromResult(queryable.SingleOrDefault()); + + if (provider != null) + { + return provider.SingleOrDefaultAsync(queryable, cancellationToken); + } + + return Task.FromResult(queryable.SingleOrDefault())!; } - public Task SingleOrDefaultAsync(IQueryable queryable, Expression> predicate, + public Task SingleOrDefaultAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); - return provider != null - ? provider.SingleOrDefaultAsync(queryable, predicate, cancellationToken) - : Task.FromResult(queryable.SingleOrDefault(predicate)); + + if (provider != null) + { + return provider.SingleOrDefaultAsync(queryable, predicate, cancellationToken); + } + + return Task.FromResult(queryable.SingleOrDefault(predicate))!; } - public Task MinAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task MinAsync(IQueryable queryable, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); - return provider != null - ? provider.MinAsync(queryable, cancellationToken) - : Task.FromResult(queryable.Min()); + + if(provider != null) + { + return provider.MinAsync(queryable, cancellationToken); + } + + return Task.FromResult(queryable.Min())!; } - public Task MinAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + public Task MinAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); - return provider != null - ? provider.MinAsync(queryable, selector, cancellationToken) - : Task.FromResult(queryable.Min(selector)); + + if(provider != null) + { + return provider.MinAsync(queryable, selector, cancellationToken); + } + + return Task.FromResult(queryable.Min(selector))!; } - public Task MaxAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task MaxAsync(IQueryable queryable, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); - return provider != null - ? provider.MaxAsync(queryable, cancellationToken) - : Task.FromResult(queryable.Max()); + + if(provider != null) + { + return provider.MaxAsync(queryable, cancellationToken); + } + + return Task.FromResult(queryable.Max())!; } - public Task MaxAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + public Task MaxAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); - return provider != null - ? provider.MaxAsync(queryable, selector, cancellationToken) - : Task.FromResult(queryable.Max(selector)); + + if(provider != null) + { + return provider.MaxAsync(queryable, selector, cancellationToken); + } + + return Task.FromResult(queryable.Max(selector))!; } public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableExecuter.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableExecuter.cs index 5d1e3cf7d1..2bea6c4604 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableExecuter.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableExecuter.cs @@ -75,12 +75,12 @@ public interface IAsyncQueryableExecuter CancellationToken cancellationToken = default); - Task FirstOrDefaultAsync( + Task FirstOrDefaultAsync( [NotNull] IQueryable queryable, CancellationToken cancellationToken = default); - Task FirstOrDefaultAsync( + Task FirstOrDefaultAsync( [NotNull] IQueryable queryable, [NotNull] Expression> predicate, CancellationToken cancellationToken = default); @@ -100,12 +100,12 @@ public interface IAsyncQueryableExecuter CancellationToken cancellationToken = default); - Task LastOrDefaultAsync( + Task LastOrDefaultAsync( [NotNull] IQueryable queryable, CancellationToken cancellationToken = default); - Task LastOrDefaultAsync( + Task LastOrDefaultAsync( [NotNull] IQueryable queryable, [NotNull] Expression> predicate, CancellationToken cancellationToken = default); @@ -124,11 +124,11 @@ public interface IAsyncQueryableExecuter [NotNull] Expression> predicate, CancellationToken cancellationToken = default); - Task SingleOrDefaultAsync( + Task SingleOrDefaultAsync( [NotNull] IQueryable queryable, CancellationToken cancellationToken = default); - Task SingleOrDefaultAsync( + Task SingleOrDefaultAsync( [NotNull] IQueryable queryable, [NotNull] Expression> predicate, CancellationToken cancellationToken = default); @@ -137,12 +137,12 @@ public interface IAsyncQueryableExecuter #region Min - Task MinAsync( + Task MinAsync( [NotNull] IQueryable queryable, CancellationToken cancellationToken = default); - Task MinAsync( + Task MinAsync( [NotNull] IQueryable queryable, [NotNull] Expression> selector, CancellationToken cancellationToken = default); @@ -151,12 +151,12 @@ public interface IAsyncQueryableExecuter #region Max - Task MaxAsync( + Task MaxAsync( [NotNull] IQueryable queryable, CancellationToken cancellationToken = default); - Task MaxAsync( + Task MaxAsync( [NotNull] IQueryable queryable, [NotNull] Expression> selector, CancellationToken cancellationToken = default); diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableProvider.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableProvider.cs index f32153d901..3f38553ac5 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableProvider.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableProvider.cs @@ -77,12 +77,12 @@ public interface IAsyncQueryableProvider CancellationToken cancellationToken = default); - Task FirstOrDefaultAsync( + Task FirstOrDefaultAsync( [NotNull] IQueryable queryable, CancellationToken cancellationToken = default); - Task FirstOrDefaultAsync( + Task FirstOrDefaultAsync( [NotNull] IQueryable queryable, [NotNull] Expression> predicate, CancellationToken cancellationToken = default); @@ -102,12 +102,12 @@ public interface IAsyncQueryableProvider CancellationToken cancellationToken = default); - Task LastOrDefaultAsync( + Task LastOrDefaultAsync( [NotNull] IQueryable queryable, CancellationToken cancellationToken = default); - Task LastOrDefaultAsync( + Task LastOrDefaultAsync( [NotNull] IQueryable queryable, [NotNull] Expression> predicate, CancellationToken cancellationToken = default); @@ -126,11 +126,11 @@ public interface IAsyncQueryableProvider [NotNull] Expression> predicate, CancellationToken cancellationToken = default); - Task SingleOrDefaultAsync( + Task SingleOrDefaultAsync( [NotNull] IQueryable queryable, CancellationToken cancellationToken = default); - Task SingleOrDefaultAsync( + Task SingleOrDefaultAsync( [NotNull] IQueryable queryable, [NotNull] Expression> predicate, CancellationToken cancellationToken = default); @@ -139,12 +139,12 @@ public interface IAsyncQueryableProvider #region Min - Task MinAsync( + Task MinAsync( [NotNull] IQueryable queryable, CancellationToken cancellationToken = default); - Task MinAsync( + Task MinAsync( [NotNull] IQueryable queryable, [NotNull] Expression> selector, CancellationToken cancellationToken = default); @@ -153,12 +153,12 @@ public interface IAsyncQueryableProvider #region Max - Task MaxAsync( + Task MaxAsync( [NotNull] IQueryable queryable, CancellationToken cancellationToken = default); - Task MaxAsync( + Task MaxAsync( [NotNull] IQueryable queryable, [NotNull] Expression> selector, CancellationToken cancellationToken = default); diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AbpAsyncTimer.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AbpAsyncTimer.cs index 908b3fa09d..c17861ac21 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AbpAsyncTimer.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AbpAsyncTimer.cs @@ -43,7 +43,7 @@ public class AbpAsyncTimer : ITransientDependency Logger = NullLogger.Instance; _taskTimer = new Timer( - TimerCallBack, + TimerCallBack!, null, Timeout.Infinite, Timeout.Infinite diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AbpTimer.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AbpTimer.cs index a5d7a4bdb8..05e4b14daa 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AbpTimer.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AbpTimer.cs @@ -15,7 +15,7 @@ public class AbpTimer : ITransientDependency /// /// This event is raised periodically according to Period of Timer. /// - public event EventHandler Elapsed; + public event EventHandler Elapsed = default!; /// /// Task period of timer (as milliseconds). @@ -42,7 +42,7 @@ public class AbpTimer : ITransientDependency Logger = NullLogger.Instance; _taskTimer = new Timer( - TimerCallBack, + TimerCallBack!, null, Timeout.Infinite, Timeout.Infinite diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AmbientDataContextAmbientScopeProvider.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AmbientDataContextAmbientScopeProvider.cs index 06b71d16f3..3eabab1390 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AmbientDataContextAmbientScopeProvider.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AmbientDataContextAmbientScopeProvider.cs @@ -24,7 +24,7 @@ public class AmbientDataContextAmbientScopeProvider : IAmbientScopeProvider>.Instance; } - public T GetValue(string contextKey) + public T? GetValue(string contextKey) { var item = GetCurrentItem(contextKey); if (item == null) @@ -52,6 +52,11 @@ public class AmbientDataContextAmbientScopeProvider : IAmbientScopeProvider : IAmbientScopeProvider : IAmbientScopeProvider> AsyncLocalDictionary = new ConcurrentDictionary>(); + private static readonly ConcurrentDictionary> AsyncLocalDictionary = new ConcurrentDictionary>(); - public void SetData(string key, object value) + public void SetData(string key, object? value) { - var asyncLocal = AsyncLocalDictionary.GetOrAdd(key, (k) => new AsyncLocal()); + var asyncLocal = AsyncLocalDictionary.GetOrAdd(key, (k) => new AsyncLocal()); asyncLocal.Value = value; } - public object GetData(string key) + public object? GetData(string key) { - var asyncLocal = AsyncLocalDictionary.GetOrAdd(key, (k) => new AsyncLocal()); + var asyncLocal = AsyncLocalDictionary.GetOrAdd(key, (k) => new AsyncLocal()); return asyncLocal.Value; } } diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AsyncLocalSimpleScopeExtensions.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AsyncLocalSimpleScopeExtensions.cs index 3d353921d9..5ad251f30c 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AsyncLocalSimpleScopeExtensions.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AsyncLocalSimpleScopeExtensions.cs @@ -5,11 +5,11 @@ namespace Volo.Abp.Threading; public static class AsyncLocalSimpleScopeExtensions { - public static IDisposable SetScoped(this AsyncLocal asyncLocal, T value) + public static IDisposable SetScoped(this AsyncLocal asyncLocal, T value) { var previousValue = asyncLocal.Value; asyncLocal.Value = value; - return new DisposeAction, T>>(static (state) => + return new DisposeAction, T?>>(static (state) => { var (asyncLocal, previousValue) = state; asyncLocal.Value = previousValue; diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/CancellationTokenProviderBase.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/CancellationTokenProviderBase.cs index 7de1270ff0..a713d3a7fd 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/CancellationTokenProviderBase.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/CancellationTokenProviderBase.cs @@ -11,7 +11,7 @@ public abstract class CancellationTokenProviderBase : ICancellationTokenProvider protected IAmbientScopeProvider CancellationTokenOverrideScopeProvider { get; } - protected CancellationTokenOverride OverrideValue => CancellationTokenOverrideScopeProvider.GetValue(CancellationTokenOverrideContextKey); + protected CancellationTokenOverride? OverrideValue => CancellationTokenOverrideScopeProvider.GetValue(CancellationTokenOverrideContextKey); protected CancellationTokenProviderBase(IAmbientScopeProvider cancellationTokenOverrideScopeProvider) { diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/IAmbientDataContext.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/IAmbientDataContext.cs index 78482aba53..ae5a2aeb92 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/IAmbientDataContext.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/IAmbientDataContext.cs @@ -2,7 +2,7 @@ public interface IAmbientDataContext { - void SetData(string key, object value); + void SetData(string key, object? value); - object GetData(string key); + object? GetData(string key); } diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/IAmbientScopeProvider.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/IAmbientScopeProvider.cs index 4f2cd7650c..b65edec931 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/IAmbientScopeProvider.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/IAmbientScopeProvider.cs @@ -4,7 +4,7 @@ namespace Volo.Abp.Threading; public interface IAmbientScopeProvider { - T GetValue(string contextKey); + T? GetValue(string contextKey); IDisposable BeginScope(string contextKey, T value); }