長時間運行的線程幫我解決下一個問題。 我有ASP .NET MVC2應用程序。我在IIS 7.5上運行它。在一個頁面中,用戶單擊此按鈕的按鈕和處理程序將請求發送到服務器(jquery.ajax)。在控制器服務器操作將啓動新的線程(這使得很長一段時間進口):靜態變量和IIS 7.5
var thread = new Thread(RefreshCitiesInDatabase);
thread.Start();
進口國是在靜態變量可用。新線程在工作開始時更改變量的值。 用戶也可以藉助此變量來查看導入狀態,該變量用於查看。用戶看到導入的狀態。 當我幾分鐘開始這個功能時,一切都是okey。在頁面上我看到正確的導入狀態,導入記錄的數量發生了變化,我看到日誌中的更改。但幾分鐘後開始麻煩。 當我刷新與進口狀態頁面有時我看到進口的好,但有時我看到頁面的默認值約爲進口(如應用程序剛啓動時),但在那之後我又可以看到正常進口的狀態頁面。 我試圖將Visual Studio附加到IIS進程和調試應用程序。但是,當請求到達控制器時,有時靜態變量有正確的值,有時它們有默認值(靜態int有0,靜態字符串有「」等)。 告訴我我做錯了什麼。可能我必須以其他方式啓動其他線程?
由於提前, 梅德
我添加的部分代碼: 控制器:
public class ImportCitiesController : Controller
{
[Dependency]
public SaveCities SaveCities { get; set; }
//Start import
public JsonResult StartCitiesImport()
{
//Methos in core dll, which makes import
SaveCities.StartCitiesSaving();
return Json("ok");
}
//Get Information about import
public ActionResult GetImportState()
{
var model = new ImportCityStatusModel
{ NowImportProcessing = SaveCities.CitiesSaving };
return View(model);
}
}
類的核心:
public class SaveCities
{
// Property equals true, when program are saving to database
public static bool CitiesSaving = false;
public void StartCitiesSaving()
{
var thread = new Thread(RefreshCitiesInDatabase);
thread.Start();
}
private static void RefreshCitiesInDatabase()
{
CitiesSaving = true;
//Processing......
CitiesSaving = false;
}
}
UPDATE 我想,我找到了問題,但我仍然不知道如何解決它。我的IIS使用應用程序池的參數「Maximum Worker Processes」= 10。應用程序中的所有任務都由少量進程處理。而且我對控制進口狀態的請求總是由不同的進程處理。他們有不同的靜態變量。我想這是解決問題的正確方法。 但我不知道如何合併一個地方的所有靜態值。
時,應該鎖定CitiesSaving,可能使其揮發到 – dvhh 2011-01-12 09:51:03