长时间运行的线程帮我解决下一个问题。 我有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