C#异步

mac2022-06-30  77

using System; using System.Threading; using System.Runtime.Remoting.Messaging; using System.Collections.Generic; namespace PurchaseSystem.Component { public enum FlowType { CaiGou, YingFu } public delegate void ProccessFlowDelegate(FlowType type); public class Flow { private void AsyncFlow(FlowType type, Action<IAsyncResult, bool> callback = null) { ProccessFlowDelegate asyncFlow = AsyncFlowHandler; IAsyncResult asyncResult = asyncFlow.BeginInvoke(type, AsyncFlowCallback, null); ThreadPool.RegisterWaitForSingleObject(asyncResult.AsyncWaitHandle, AsyncFlowCompleteCallback, new List<object>() { asyncResult, callback }, 1800000, true); } private static void AsyncFlowCompleteCallback(object state, bool isTimeout) { List<object> stateList = state as List<object>; IAsyncResult result = stateList[0] as IAsyncResult; Action<IAsyncResult, bool> callback = stateList[1] as Action<IAsyncResult, bool>; if (isTimeout) { if (!result.IsCompleted) { result.AsyncWaitHandle.Close(); } } callback(result, isTimeout); } private static void AsyncFlowCallback(IAsyncResult result) { ProccessFlowDelegate d = (ProccessFlowDelegate)((AsyncResult)result).AsyncDelegate; d.EndInvoke(result); } private void AsyncFlowHandler(FlowType type) { if (type == FlowType.CaiGou) { } else if (type == FlowType.YingFu) { } } public void CaiGouProccess(Guid purchaseApplyId) { AsyncFlow(FlowType.CaiGou, null); } } } using System; using System.Threading; using System.Collections.Generic; using System.Runtime.Remoting.Messaging; namespace PurchaseSystem.Component { public enum FlowProcessType { CaiGou, YingFu } public delegate void FlowProcessDelegate(FlowProcessType type, params object[] parameters); public class FlowProcess { private void AsyncFlowProcess(FlowProcessType type, params object[] parameters) { FlowProcessDelegate asyncMailNotice = AsyncFlowProcessHandler; IAsyncResult asyncResult = asyncMailNotice.BeginInvoke(type, parameters, FlowProcessCallback, null); ThreadPool.RegisterWaitForSingleObject( asyncResult.AsyncWaitHandle, FlowProcessCompleteCallback, new List<object>() { asyncResult }, 1800000, true); } private void FlowProcessCallback(IAsyncResult result) { MailNoticeDelegate d = (MailNoticeDelegate)((AsyncResult)result).AsyncDelegate; d.EndInvoke(result); } private void FlowProcessCompleteCallback(object state, bool isTimeout) { List<object> stateList = state as List<object>; IAsyncResult result = stateList[0] as IAsyncResult; if (isTimeout) { if (!result.IsCompleted) { result.AsyncWaitHandle.Close(); } } } private void AsyncFlowProcessHandler(FlowProcessType type, params object[] parameters) { if (type == FlowProcessType.CaiGou) { } } public void PurchaseApplyApprovalMailNotice2(Guid purchaseApplyId) { AsyncFlowProcess(FlowProcessType.CaiGou, purchaseApplyId); } } }

 

转载于:https://www.cnblogs.com/daixingqing/p/4429346.html

相关资源:C#异步完成文件夹和文件复制
最新回复(0)