using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace SqlSugar { public class CallContextAsync { static ConcurrentDictionary> state = new ConcurrentDictionary>(); public static void SetData(string name, T data) => state.GetOrAdd(name, _ => new AsyncLocal()).Value = data; public static T GetData(string name) => state.TryGetValue(name, out AsyncLocal data) ? data.Value : default(T); } public class CallContextThread { static ConcurrentDictionary> state = new ConcurrentDictionary>(); public static void SetData(string name, T data) => state.GetOrAdd(name, _ => new ThreadLocal()).Value = data; public static T GetData(string name) => state.TryGetValue(name, out ThreadLocal data) ? data.Value : default(T); } }