2012-06-25 37 views
1

在ASP.NET MVC中,当应用程序启动时,我需要在后台连接一些连接(LDAP,...)。有没有办法在ASP.NET MVC应用程序中执行“线程安全”?ASP.NET中的线程安全MVC

感谢,

回答

2

您应该在AS.NET中使用avoid running background tasks。但如果由于某种原因需要这样做,您可以在Application_Start开始一个新线程并执行这些任务。由于Application_Start只执行一次,此线程将运行一次(除非你配置了一些定时器 - >你可能不应该这样做)。

另一方面,如果您需要从ASP.NET MVC控制器(在HTTP请求的上下文中运行)中使用此后台线程完成的工作,则需要进行适当的同步以确保初始化你在Application_Start开始的线程已经完成。根据你的具体情况,可能有不同的方法来实现这一点。

+0

如果这个动作需要1分钟,应用程序在Application_Start中停留1分钟?我想避免这种情况 –

+0

在这种情况下,您可以启动一个新线程并在线程内执行此任务。但正如我所说,如果您需要在控制器内使用此后台线程的结果,您将遇到问题,并且需要进行同步。 –

0

这里是你需要怎么办呢,基本上我们正在创建一个匿名delegateInvoke发起的连接功能的样品。

if(this.InvokeRequired) 
{ 
    Invoke(new MethodInvoker(() => yourFunctionThatCreatesSomeConnections(Args))); 
} 
else 
{ 
yourFunctionThatCreatesSomeConnections(Args); 
} 
+1

他问ASP.NET,而不是WinForms或WPF。没有'InvokeRequired'和'Invoke'方法。 –

+0

http://stackoverflow.com/questions/1103745/thread-safety-in-asp-net-mvc – Mayank

+1

我不明白这个链接与你已经显示的InvokeRequired和Invoke方法有什么关系在你的答案中。 –