標籤:
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); } }}
C#非同步