我正在使用MVC4 ApiController將數據上傳到Azure Blob。以下是示例代碼:在MVC 4異步ApiController中使用Task.Factory.StartNew?
public Task PostAsync(int id)
{
return Task.Factory.StartNew(() =>
{
// CloudBlob.UploadFromStream(stream);
});
}
此代碼是否有意義?我認爲ASP.NET已經在工作線程中處理請求,所以在另一個線程中運行UploadFromStream似乎沒有意義,因爲它現在使用兩個線程來運行此方法(我假設原始工作線程正在等待此UploadFromStream以完成?)
所以我的理解是,異步ApiController只有有意義的,如果我們使用一些內置的異步方法,如HttpClient.GetAsync或SqlCommand.ExecuteReaderAsync。這些方法可能在內部使用I/O完成端口,因此可以在執行實際工作時釋放線程。所以我應該改變這個代碼?
public Task PostAsync(int id)
{
// only to show it's using the proper async version of the method.
return TaskFactory.FromAsync(BeginUploadFromStream, EndUploadFromStream...)
}
在另一方面,如果所有的郵政法的工作是CPU /內存密集型,然後異步版本PostAsync將不利於吞吐量要求。使用常規的「公共無效Post(int id)」方法可能會更好,對嗎?
我知道這是很多問題。希望它能夠闡明我對ASP.NET MVC中異步使用的理解。謝謝。