zoukankan      html  css  js  c++  java
  • C#异步

    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);
            }
        }
    }
  • 相关阅读:
    Linux虚拟内存管理(glibc)
    linux kernel内存回收机制
    Linux的Cache Memory(缓存内存)机制
    imx6用文件io操作gpio
    imx6中iomux IO复用
    start with git
    Linux进程的虚拟内存区域划分
    关于函数返回值为指针类型的分析
    对LCD接口的认识
    LCD屏背光驱动调试心得---血的教训
  • 原文地址:https://www.cnblogs.com/daixingqing/p/4429346.html
Copyright © 2011-2022 走看看