Wind-Eagle

No pain,no gain!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

反射加异步,根据枚举值来异步执行方法

Posted on 2008-12-04 18:19  Andrew Yin  阅读(365)  评论(0)    收藏  举报

反射加异步,根据枚举值来异步执行方法:

 

        protected delegate void AsyncWriteLogMsgEvent(string message);
        
protected delegate void AsyncWriteLogExceptionEvent(string message, Exception exception);

        
internal void Log(LogLevel level, string message)
        {
            Type thisType 
= this.GetType();
            MethodInfo mi 
= thisType.GetMethod(SiteExtensions.GetEnumName(level));
            
if (mi == null || !mi.IsPublic || mi.IsStatic || mi.IsConstructor) return;
            AsyncWriteLogMsgEvent writer 
= m => mi.Invoke(thisnew object[] { m });
            writer.BeginInvoke(message, 
nullnull);
        }

        
internal void Log(LogLevel level, string message, Exception exception)
        {
            Type thisType 
= this.GetType();
            MethodInfo mi 
= thisType.GetMethod(SiteExtensions.GetEnumName(level));
            
if (mi == null || !mi.IsPublic || mi.IsStatic || mi.IsConstructor) return;
            AsyncWriteLogExceptionEvent writer 
= (m, e) => mi.Invoke(thisnew object[] {m, e});
            writer.BeginInvoke(message, exception, 
nullnull);
        }