///
///委托类异步调用
///
public class CPassportLog
{
private delegate int AsyncAddUserLoginLog(int iPartitionID, Guid UserCode, string strUserName,
int iGameID, int iServerID, DateTime dtLogin, string strIPAddr, out string strErrInfo);
public static int AddUserLoginLog(int iPartitionID,Guid UserCode,string strUserName,
int iGameID,int iServerID,DateTime dtLogin,string strIPAddr, out string strErrInfo){。。。}
static public void BeginAddUserLoginLog(int iPartitionID,Guid UserCode,string strUserName,
int iGameID,int iServerID,DateTime dtLogin,string strIPAddr, AsyncCallback CB)
{
AsyncAddUserLoginLog AddLog = new AsyncAddUserLoginLog(AddUserLoginLog);
string strErrInfo;
IAsyncResult AR = AddLog.BeginInvoke(iPartitionID,UserCode,strUserName,
iGameID,iServerID,dtLogin,strIPAddr,out strErrInfo, CB, AddLog);
}
static public int EndAddUserLoginLog(out string strErrInfo, IAsyncResult AR)
{
AsyncAddUserLoginLog AddLog = (AsyncAddUserLoginLog)AR.AsyncState;
int iRetCode = AddLog.EndInvoke(out strErrInfo, AR);
return iRetCode;
}
}
外部调用:
CPassportLog.BeginAddUserLoginLog(User.PartitionID, User.UserCode, User.UserName,
iGameID, iServerID, DateTime.Now, strIPAddr, CBAddUserLoginLog);
static private void CBAddUserLoginLog(IAsyncResult AR)
{
string strErrInfo;
PassportLib.CPassportLog.EndAddUserLoginLog(out strErrInfo, AR);
}
本文介绍了一个使用 C# 实现的异步日志记录功能,通过委托和回调机制来实现用户登录日志的非阻塞式记录。该方案能够有效地提高系统的响应速度,并展示了如何使用 BeginInvoke 和 EndInvoke 方法进行异步操作。
105

被折叠的 条评论
为什么被折叠?



