2016-12-15 58 views
0

我對ASP.NET Web API和一般的Web開發並不陌生。來自Web API中隊列的過程

我有一個POST方法,將添加一個新的項目到我的數據庫。

[HttpPost] 
public IHttpActionResult Post([FromBody] Item item) 
{ 
    try 
    { 
     // ADD ITEM TO DATABASE 
    } 
    catch 
    { 
     return BadRequest("ERROR"); 
    } 

} 

我的問題是,添加項目到數據庫之前有很多處理的發生這種情況(如調用另一個,外部API等),這需要一些時間。如果在處理當前請求時出現另一個請求,我不希望API被阻止。

我想要做的是將要處理的項目添加到某個隊列中,並在後臺運行一些單獨的線程,將項目從隊列中拉出並處理它們。

有關如何處理此問題的任何建議?

+0

如果在正在處理當前請求的另一個請求到來時,您可以使用'*爲我不想追究了API做async'和'await' * –

回答

3

當應用程序開始處理後臺進程時,您可以輕鬆創建一個線程。只需創建一個隊列並將其推送到它。 但是,我推薦使用Hangfire,使用非常方便。你只需要爲每個API調用創建一個Hangfire作業。 Hangfire會爲你執行它們。 http://hangfire.io/

var jobId = BackgroundJob.Enqueue(
    () => Console.WriteLine("Fire-and-forget!"));