/// <summary> /// 调用函数 /// </summary> /// <param name="input">可选个数的输入参数</param> /// <returns></returns> public object DoAction(params object[] input) { EventNeedRun whatTodo = CombineActionAndManuset; //通过BeginInvoke方法,在线程池上异步的执行方法。 IAsyncResult r = whatTodo.BeginInvoke(input, MyAsyncCallback, null); //设置阻塞,如果上述的BeginInvoke方法在timeout之前运行完毕,则manu会收到信号。此时isGetSignal为true。 //如果timeout时间内,还未收到信号,即异步方法还未运行完毕,则isGetSignal为false。 this.IsGetSignal = this._manu.WaitOne(this.Timeout); return(this.IsGetSignal ? whatTodo.EndInvoke(r) : null); }
/// /// 调用函数 /// 可选个数的输入参数 /// public object doAction(params object[] input) { EventNeedRun WhatTodo = CombineActionAndManuset; //通过BeginInvoke方法,在线程池上异步的执行方法。 var r = WhatTodo.BeginInvoke(input, MyAsyncCallback, null); //设置阻塞,如果上述的BeginInvoke方法在timeout之前运行完毕,则manu会收到信号。此时isGetSignal为true。 //如果timeout时间内,还未收到信号,即异步方法还未运行完毕,则isGetSignal为false。 isGetSignal = manu.WaitOne(timeout); if (isGetSignal == true) { return(WhatTodo.EndInvoke(r)); } else { return(null); } }
/// <summary> /// 调用函数 /// </summary> /// <param name="input">可选个数的输入参数</param> /// <returns></returns> public async void doAction(params object[] input) { EventNeedRun WhatTodo = CombineActionAndManuset; //通过BeginInvoke方法,在线程池上异步的执行方法。 var workTask = Task.Run(() => WhatTodo.Invoke(input)); // var followUpTask = workTask.ContinueWith(MyAsyncCallback); var ret = await workTask; // await followUpTask; // var r = WhatTodo.BeginInvoke(input, MyAsyncCallback, null); //设置阻塞,如果上述的BeginInvoke方法在timeout之前运行完毕,则manu会收到信号。此时isGetSignal为true。 //如果timeout时间内,还未收到信号,即异步方法还未运行完毕,则isGetSignal为false。 isGetSignal = manu.WaitOne(timeout); if (isGetSignal == true) { return; } }
/// <summary> /// 构造函数,传入超时的时间以及运行的方法 /// </summary> /// <param name="_action">运行的方法 </param> /// <param name="_timeout">超时的时间</param> public clsFuncTimeout(EventNeedRun _action, int _timeout) { FunctionNeedRun = _action; timeout = _timeout; }
/// <summary> /// 构造函数,传入超时的时间以及运行的方法 /// </summary> /// <param name="action">运行的方法</param> /// <param name="timeout">超时的时间</param> public FuncTimeout(EventNeedRun action, int timeout) { this._functionNeedRun = action; this.Timeout = timeout; }