2012-06-25 36 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方法有什麼關係在你的答案中。 –