内部线程中的错误日志无法正常工作

时间:2018-01-17 10:37:22

标签: c# asp.net multithreading thread-safety threadpool

我在线程内部调用了以下方法。在inside方法中我写了一些日志,它在记事本文件中写了一些变量值。

问题:有时候方法的最后一次记录不会记录任何内容。即最后一行不会在某个时间进行。我无法理解问题。如果某处有问题,请指导我。 这是在iis服务器中托管的Web应用程序。

功能:

public bool ResetEmployeeAssignedCoursesByRole()
    {
        bool bReturn = false;
        DbTransactionHelper dbTransactionHelper = new DbTransactionHelper();
        dbTransactionHelper.BeginTransaction();
        try
        {
            // this line execuete fine
            ErrorLog.createRoleLog("Method sp_Reset_EmpAssignedCoursesByRole  Started " + this.RoleID + " Course ID " + this.CourseID + " External Message " + sMessage);
            StringBuilder sbQueryEmployeeCourse = new StringBuilder();
            sbQueryEmployeeCourse.Append(" set @roleID = " + roleID + "; ");
            sbQueryEmployeeCourse.Append(" set @courseID = " + courseID + "; ");
            sbQueryEmployeeCourse.Append(" set @inActiveReason = " + inActiveReason + "; ");
            sbQueryEmployeeCourse.Append(" set @lastRecordUpdateSource = " + lastRecordUpdateSource + "; ");
            sbQueryEmployeeCourse.Append(" call sp_Reset_EmpAssignedCoursesByRole (@roleID, @courseID, @inActiveReason, @lastRecordUpdateSource); ");

            DataTable dtEmployeeCourse = dbTransactionHelper.GetDataTable(BusinessUtility.GetString(sbQueryEmployeeCourse), CommandType.Text, null
                    );
            dbTransactionHelper.CommitTransaction();
            bReturn = true;


            // this line not execuete sometime.
            ErrorLog.createRoleLog("Method sp_Reset_EmpAssignedCoursesByRole  Ended " + this.RoleID + " Course ID " + this.CourseID + " External Message " + sMessage);
        }
        catch (Exception ex)
        {
            ErrorLog.createRoleLog("Add Role ID " + BusinessUtility.GetString(roleID));
            dbTransactionHelper.RollBackTransaction();
            ErrorLog.createRoleLog("Add Course ID " + BusinessUtility.GetString(courseID));
            ErrorLog.createRoleLog(ex.ToString());
        }
        return bReturn;
    }

调用如下方法:

Thread t = new Thread(ResetEmployeeAssignedCoursesByRole);
t.Start();

功能createRoleLog:

public static void createRoleLog(string errorMessage, int empHdrID = 0)
    {
        try
        {
            //string path = BusinessUtility.GetString(AppConfig.GetAppConfigValue("LogsDiractory")) + "Log" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
            string path = BusinessUtility.GetString(ErrorLog.ErrorLogPath) + "RoleLog" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
            if (BusinessUtility.GetString(AppConfig.GetAppConfigValue("LogError")).ToString().ToUpper() == "TRUE")
            {
                if (!File.Exists(path))
                {
                    StreamWriter sw = File.CreateText(path);
                    sw.Close();
                }
                //using (System.IO.StreamWriter sw = System.IO.File.AppendText(path))
                //{
                //    sw.WriteLine("-------- " + DateTime.Now + " --------");
                //    sw.WriteLine(errorMessage);
                //    sw.WriteLine("------------------------");
                //    sw.Close();
                //}




                if (!IsFileLocked(new FileInfo(path)))
                {
                    using (FileStream stream = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
                    {
                        using (System.IO.StreamWriter sw = new StreamWriter(stream))
                        {
                            if (empHdrID != 0)
                            {
                                sw.WriteLine("-------- [empHdrID: " + empHdrID + "] " + DateTime.Now + " --------");
                            }
                            else
                            {
                                sw.WriteLine("-------- " + DateTime.Now + " --------");
                            }

                            sw.WriteLine(errorMessage);
                            sw.WriteLine("------------------------");
                            sw.Close();
                        }
                    }
                }
                else
                {

                }


            }

        }
        catch (Exception ex)
        {
            //throw ex;
        }
    }

有时不执行的最后一行功能是:

**这条线有时不是execuete。**

        ErrorLog.createRoleLog("Method sp_Reset_EmpAssignedCoursesByRole  Ended " + this.RoleID + " Course ID " + this.CourseID + " External Message " + sMessage);

0 个答案:

没有答案