1. 程式人生 > 其它 >多執行緒中使用HttpContext.Current為null的解決辦法

多執行緒中使用HttpContext.Current為null的解決辦法

記一次專案中遇到的問題。

最近在實現一個商品庫自動同步功能,使用的是Quartz.Net,然後每天凌晨執行一次,執行的時候,會去自動的遍歷資料夾下是否有新增的檔案,如果有,則獲取這些檔案,自動同步到七牛雲空間上。

在這其中,就有用到HttpContext.Current.Server.MapPath() 將相對路徑轉為物理路徑。

直接呼叫方法,是正常的,但是在Quartz.Net執行的時候,用的是多執行緒,所以導致HttpContext.Current獲取到的是null。

通過百度,查詢到的原因如下:

因為多執行緒情況下,當前執行緒可能並非http請求處理執行緒,根本沒發生請求,所以無法獲取到HttpContext就是null.

解決方法可以採用這種:

public static string MapPath(string strPath)
        {
            if (HttpContext.Current != null)
            {
                return HttpContext.Current.Server.MapPath(strPath);//有http請求
            }
            else //非web程式引用         
            {
                strPath = strPath.Replace("
/", "\\"); if (strPath.StartsWith("\\")) { //strPath = strPath.Substring(strPath.IndexOf('\\', 1)).TrimStart('\\'); strPath = strPath.TrimStart('\\'); } return System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath); } }