我曾在另一個不同的thread中提出了一個關於TPL中的GDI +問題的問題(async/await),討論轉向了是否存在任何問題爲此使用TPL的好處。單核心機器上的Web API和異步/等待優勢
所以我試圖理解這裏的答案。
場景大致是這樣的:
- 一個Web API控制器/方法接收一個圖像上載
- 其調整大小的圖像,並將其上傳至天青被多次調用用於各種尺寸的方法(< 10 )
- 該方法返回一個開放的每個調整大小和上傳的圖像
- 響應被返回給Web客戶端API
請注意,這可能會在單核機器上運行,因此通過並行運行所有調整大小(例如縮短請求的總長度)不會帶來好處。
但我的印象是包裝所有的各種尺寸縮小到一個方法和運行異步將至少在Web API線程返回到池中,暫時處理其他請求(在我當一個普通線程運行調整任務),這是一件好事。該代碼是這樣的:
public Dictionary<ProfilePhotoSize, Uri> ProcessImages(Stream photoStream)
{
var imgUris = new Dictionary<ProfilePhotoSize, Uri>()
{
ProfilePhotoSize.FiveHundredFixedWidth, ResizeAndUpload(ProfilePhotoSize.FiveHundredFixedWidth, photoStream)},
ProfilePhotoSize.Square220, ResizeAndUpload(ProfilePhotoSize.Square220, photoStream)},
ProfilePhotoSize.Square140, ResizeAndUpload(ProfilePhotoSize.Square140, photoStream)},
ProfilePhotoSize.Square80, ResizeAndUpload(ProfilePhotoSize.Square80, photoStream)},
ProfilePhotoSize.Square50, ResizeAndUpload(ProfilePhotoSize.Square50, photoStream)}
};
return imgUris;
}
和...
var photoUris = await Task.Run(() => _photoService.ProcessImages(photoStream);
所以,問題是 - 我是大錯特錯?也許這個理論是正確的,但是它沒有被正確實施(可能我需要使用ConfigureAwait)?
這裏的現實是什麼?
看看這裏http://www.tugberkugurlu.com/archive/how-and-where-concurrent-asynchronous-io-with-asp-net-web-api另外,爲什麼不使用Azure WebJobs來調整圖像大小和上傳到Azure存儲? –
@MatijaGrcic閱讀你的鏈接,它似乎支持我的理解 - 是的?至於Azure WebJobs,我們可能會離開Azure,但如果我們不這樣做,我會着眼於它...... – Michael