CallContext.cs 911 B

12345678910111213141516171819202122232425262728
  1. using System.Collections.Concurrent;
  2. using System.Threading;
  3. namespace Masuit.Tools.Core.Net
  4. {
  5. /// <summary>
  6. /// 取线程内唯一对象
  7. /// </summary>
  8. /// <typeparam name="T"></typeparam>
  9. public static class CallContext<T>
  10. {
  11. static ConcurrentDictionary<string, AsyncLocal<T>> state = new ConcurrentDictionary<string, AsyncLocal<T>>();
  12. /// <summary>
  13. /// 设置值
  14. /// </summary>
  15. /// <param name="name"></param>
  16. /// <param name="data"></param>
  17. public static void SetData(string name, T data) => state.GetOrAdd(name, _ => new AsyncLocal<T>()).Value = data;
  18. /// <summary>
  19. /// 获取值
  20. /// </summary>
  21. /// <param name="name"></param>
  22. /// <returns></returns>
  23. public static T GetData(string name) => state.TryGetValue(name, out AsyncLocal<T> data) ? data.Value : default(T);
  24. }
  25. }