AsyncLocalAmbientDataContext.cs 792 B

1234567891011121314151617181920212223
  1. using System.Collections.Concurrent;
  2. using System.Threading;
  3. using Abp.Dependency;
  4. namespace Abp.Runtime.Remoting
  5. {
  6. public class AsyncLocalAmbientDataContext : IAmbientDataContext, ISingletonDependency
  7. {
  8. private static readonly ConcurrentDictionary<string, AsyncLocal<object>> AsyncLocalDictionary = new ConcurrentDictionary<string, AsyncLocal<object>>();
  9. public void SetData(string key, object value)
  10. {
  11. var asyncLocal = AsyncLocalDictionary.GetOrAdd(key, (k) => new AsyncLocal<object>());
  12. asyncLocal.Value = value;
  13. }
  14. public object GetData(string key)
  15. {
  16. var asyncLocal = AsyncLocalDictionary.GetOrAdd(key, (k) => new AsyncLocal<object>());
  17. return asyncLocal.Value;
  18. }
  19. }
  20. }