我一直在試驗一些需要在地方重構的舊代碼,並測試是否有異步上傳文件(服務器端)的iis線程等有任何改進。使用jQuery文件上傳客戶端。使用異步&等待.net 4.5 mvc c#
原代碼
[HttpPost]
public ActionResult UploadDocument(HttpPostedFileBase uploadedFile) {
// Do any validation here
// Read bytes from http input stream into fileData
Byte[] fileData;
using (BinaryReader binaryReader =
new BinaryReader(uploadedFile.InputStream)) {
fileData = binaryReader.ReadBytes(uploadedFile.ContentLength);
}
// Create a new Postgres bytea File Blob ** NOT Async **
_fileService.CreateFile(fileData);
return Json(
new {
ReturnStatus = "SUCCESS" // Or whatever
}
);
}
新的代碼
[HttpPost]
public async Task<ActionResult> UploadDocumentAsync(HttpPostedFileBase uploadedFile) {
// Do any validation here
// Read bytes from http input stream into fileData
Byte[] fileData = new Byte[uploadedFile.ContentLength];
await uploadedFile.InputStream.ReadAsync(fileData, 0, uploadedFile.ContentLength);
// Create a new Postgres bytea File Blob ** NOT Async **
_fileService.CreateFile(fileData);
return Json(
new {
ReturnStatus = "SUCCESS" // Or whatever
}
);
}
新方法看起來正常工作,但我的問題是:
是下面的代碼正確的(最好)的方法去做吧?有沒有這樣做的陷阱?那裏有很多矛盾和過時的信息。似乎還有很多關於實際做法是否有改進或有意義的爭論。是的,它回饋給iis等的線程,但它值得討論的開銷類型。
問題
// Read bytes from http input stream into fileData
Byte[] fileData = new Byte[uploadedFile.ContentLength];
await uploadedFile.InputStream.ReadAsync(fileData, 0, uploadedFile.ContentLength);
async/await是我想的搖尾巴狗。希望看到一些證明我錯誤的論點。這是一個很好的問題。因此,它幾乎肯定會被一些過路衛隊管理員刪除。 – Sam 2015-04-03 14:32:28
你爲什麼不使CreateFile異步?這是一個測試問題,看看你是否有特殊的常見誤解。同時,我想引用您對此主題的處理方式:http://stackoverflow.com/a/25087273/122718和http://stackoverflow.com/a/12796711/122718。 – usr 2015-04-03 14:52:21
usr我可能會但那不是真的是我問。雖然關於這個話題,但是關於快速本地數據庫訪問是否更快地保持同步的爭論還有很多。 – 2015-04-03 14:56:19