/// <summary> /// 运行线程 /// </summary> private void run() { action task, domainUnload; action <Exception> onError; Monitor.Enter(threadLock); try { if (this.task == null) { Monitor.Wait(threadLock); } task = this.task; domainUnload = this.domainUnload; onError = this.onError; this.task = null; this.domainUnload = null; this.onError = null; } finally { Monitor.Exit(threadLock); } while (!isStop) { if (domainUnload != null) { fastCSharp.domainUnload.Add(domainUnload); } try { task(); } catch (Exception error) { if (onError != null) { try { onError(error); } catch (Exception error1) { log.Default.Add(error1, null, false); } } else { log.Default.Add(error, null, false); } } finally { if (domainUnload != null) { fastCSharp.domainUnload.Remove(domainUnload, false); } } threadPool.Push(this); Monitor.Enter(threadLock); try { if (this.task == null) { Monitor.Wait(threadLock); } task = this.task; domainUnload = this.domainUnload; onError = this.onError; this.task = null; this.domainUnload = null; this.onError = null; } finally { Monitor.Exit(threadLock); } } }
/// <summary> /// 运行线程 /// </summary> private void run() { #pragma warning disable 618 #pragma warning disable 612 if (DefaultFrameCount == 0) { DefaultFrameCount = new System.Diagnostics.StackTrace(threadHandle, false).FrameCount; } #pragma warning restore 612 #pragma warning restore 618 do { try { do { if (domainUnload.Type == fastCSharp.domainUnload.unloadType.None) { task.Call(); } else { fastCSharp.domainUnload.Add(ref domainUnload); task.Call(); domainUnload.Type = fastCSharp.domainUnload.unloadType.None; fastCSharp.domainUnload.Remove(ref domainUnload); } task.Value = null; onError = null; threadPool.Push(this); waitHandle.Wait(); }while (task.Type != callType.None); threads.UnsafeFree(threadIndex); return; } catch (Exception error) { try { switch (onErrorType) { case errorType.Action: new unionType { Value = onError }.ActionException(error); break; default: log.Error.Add(error, null, false); break; } } catch (Exception error1) { log.Error.Add(error1, null, false); } } finally { task.Value = null; onError = null; if (domainUnload.Type != fastCSharp.domainUnload.unloadType.None) { fastCSharp.domainUnload.Remove(ref domainUnload); } } threadPool.Push(this); waitHandle.Wait(); }while (task.Type != callType.None); //do //{ // if (domainUnload.Type != fastCSharp.domainUnload.unloadType.None) fastCSharp.domainUnload.Add(ref domainUnload); // try // { // task.Call(); // } // catch (Exception error) // { // try // { // switch (onErrorType) // { // case errorType.Action: new unionType { Value = onError }.ExceptionAction(error); break; // default: log.Error.Add(error, null, false); break; // } // } // catch (Exception error1) // { // log.Error.Add(error1, null, false); // } // } // finally // { // task.Value = null; // onError = null; // if (domainUnload.Type != fastCSharp.domainUnload.unloadType.None) fastCSharp.domainUnload.Remove(ref domainUnload); // } // threadPool.Push(this); // waitHandle.Wait(); //} //while (task.Type != callType.None); threads.UnsafeFree(threadIndex); }