static void Main(string[] args) { var pool = new HPThreadPool(); RunTest(pool); Console.WriteLine("按任意键继续下一轮测试..."); Console.ReadKey(); RunTestSocketTask(pool); Console.ReadKey(); }
static void RunTestSocketTask(HPThreadPool pool) { try { // 启动线程池 if (!pool.Start(0, RejectedPolicy.TRP_WAIT_FOR, 10, 0)) { throw new Exception("错误码:" + pool.SYSGetLastError()); } count = 300; var loopCount = count; t1 = Environment.TickCount; for (long i = 1; i <= loopCount; i++) { // GetLastError() 错误码 ERROR_DESTINATION_ELEMENT_FULL 表示任务队列已满 // dwMaxWait 参数仅对 TRP_WAIT_FOR 类型线程池生效 // 如果 dwMaxWait == -1,一直等待,直到成功或线程池关闭等原因导致失败 if (!pool.SubmitSocketTask(new SocketTaskProc(SocketTaskProc), IntPtr.Zero, (IntPtr)i, null, 0, TaskBufferType.TBT_COPY, IntPtr.Zero, IntPtr.Zero, 100)) { // ERROR_DESTINATION_ELEMENT_FULL = 1161 看上面注释 Console.WriteLine("{0} - 失败, 错误码: {1}", i, pool.SYSGetLastError()); if (Interlocked.Decrement(ref count) == 0) { t2 = Environment.TickCount; } } } Console.ReadKey(); Console.WriteLine("耗时:{0}ms", t2 - t1); pool.Stop(); } catch (Exception ex) { Console.WriteLine("发生了异常:" + ex.Message + "\r\n" + ex.StackTrace); } }