public void Does_not_throw_when_using_different_clients_on_same_Thread() { RedisConfig.AssertAccessOnlyOnSameThread = true; InvalidAccessException poolEx = null; using (var redisManager = new RedisManagerPool(Config.MasterHost)) { using (var redis = redisManager.GetClient()) { var threadId = Thread.CurrentThread.ManagedThreadId.ToString(); var key = $"Thread#{threadId}"; redis.SetValue(key, threadId); ThreadPool.QueueUserWorkItem(_ => { try { using (var poolRedis = redisManager.GetClient()) { var poolThreadId = Thread.CurrentThread.ManagedThreadId.ToString(); var poolKey = $"Thread#{poolThreadId}"; poolRedis.SetValue(poolKey, poolThreadId); Console.WriteLine("From Pool: " + poolRedis.GetValue(poolKey)); } } catch (InvalidAccessException ex) { poolEx = ex; } }); Thread.Sleep(100); Console.WriteLine("From Test: " + redis.GetValue(key)); } } Console.WriteLine(poolEx); RedisConfig.AssertAccessOnlyOnSameThread = false; }
private static bool handleInvalidAccessException(InvalidAccessException ex, MethodBase Method) { Logging.Logger("ERROR: MethodName=" + Method.Name + " Type: " + ex.GetType().Name + " #:" + ex.HResult + " Message:" + ex.Message); PromptUser(ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, "Access Denied"); return(true); }
public void Does_throw_when_using_same_client_on_different_threads() { RedisConfig.AssertAccessOnlyOnSameThread = true; InvalidAccessException poolEx = null; var redisManager = new RedisManagerPool(); using (var redis = redisManager.GetClient()) { var threadId = Thread.CurrentThread.ManagedThreadId.ToString(); var key = $"Thread#{threadId}"; redis.SetValue(key, threadId); ThreadPool.QueueUserWorkItem(_ => { using (var poolRedis = redisManager.GetClient()) { var poolThreadId = Thread.CurrentThread.ManagedThreadId.ToString(); var poolKey = $"Thread#{poolThreadId}"; poolRedis.SetValue(poolKey, poolThreadId); Console.WriteLine("From Pool: " + poolRedis.GetValue(poolKey)); try { Console.WriteLine("From Pool (using TEST): " + redis.GetValue(poolKey)); } catch (InvalidAccessException ex) { poolEx = ex; } } }); Thread.Sleep(100); Console.WriteLine("From Test: " + redis.GetValue(key)); if (poolEx == null) { throw new Exception("Should throw InvalidAccessException"); } Console.WriteLine("InvalidAccessException: " + poolEx.Message); } RedisConfig.AssertAccessOnlyOnSameThread = false; }