/// <summary> /// <see cref="ThreadPool"/>을 이용하여, 지정한 callback 함수를 지정한 갯수만큼 수행합니다. /// </summary> /// <param name="callback"></param> /// <param name="count"></param> public static void ThreadStressByThreadPool(WaitCallback callback, int count = 4) { callback.ShouldNotBeNull("callback"); using (var countdown = new CountdownEvent(count)) { for (var i = 0; i < count; i++) { ThreadPool.QueueUserWorkItem(state => { callback(state); countdown.Signal(); }); } countdown.Wait(); } }
/// <summary> /// <see cref="ThreadPool"/>을 이용하여, 지정된 callback 함수를 지정된 state 인자값 수만큼 실행합니다. /// </summary> /// <param name="callback"></param> /// <param name="states"></param> public static void ThreadStressByThreadPool(WaitCallback callback, IEnumerable <object> states) { callback.ShouldNotBeNull("callback"); states.ShouldNotBeNull("states"); var stateArray = states.ToArray(); using (var countdown = new CountdownEvent(stateArray.Length)) { foreach (var state in stateArray) { ThreadPool.QueueUserWorkItem(arg => { callback(arg); countdown.Signal(); }, state); } countdown.Wait(); } }
/// <summary> /// <see cref="ThreadPool"/>을 이용하여, 지정된 callback 함수를 지정된 state 인자값 수만큼 실행합니다. /// </summary> /// <param name="callback"></param> /// <param name="states"></param> public static void ThreadStressByThreadPool(WaitCallback callback, IEnumerable<object> states) { callback.ShouldNotBeNull("callback"); states.ShouldNotBeNull("states"); var stateArray = states.ToArray(); using(var countdown = new CountdownEvent(stateArray.Length)) { foreach(var state in stateArray) ThreadPool.QueueUserWorkItem(arg => { callback(arg); countdown.Signal(); }, state); countdown.Wait(); } }
/// <summary> /// <see cref="ThreadPool"/>을 이용하여, 지정한 callback 함수를 지정한 갯수만큼 수행합니다. /// </summary> /// <param name="callback"></param> /// <param name="count"></param> public static void ThreadStressByThreadPool(WaitCallback callback, int count = 4) { callback.ShouldNotBeNull("callback"); using(var countdown = new CountdownEvent(count)) { for(var i = 0; i < count; i++) ThreadPool.QueueUserWorkItem(state => { callback(state); countdown.Signal(); }); countdown.Wait(); } }