Я экспериментировал с каким-то старым кодом, который нуждается в рефакторинге в местах и тестировал, было ли какое-либо улучшение для потоков iis и т. Д., Загружая файл асинхронно (на стороне сервера). Использование клиентской части загрузки файла jQuery.Использование async & await .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);
Асинхронный/ждущий хвост виляет собакой, я думаю. Хотелось бы увидеть некоторые аргументы, которые докажут, что я ошибаюсь. Это хороший вопрос. Поэтому почти наверняка будет удален какой-то администратор скремблирования. – Sam
Почему вы не создали async CreateFile? Это тестовый вопрос, чтобы узнать, есть ли у вас определенное общее недоразумение или нет. Тем временем я хотел бы сослаться на ваше обращение к этой теме: http://stackoverflow.com/a/25087273/122718 и http://stackoverflow.com/a/12796711/122718. – usr
usr Я, вероятно, буду, но это не то, что я просил. Хотя по этой теме много дискуссий о том, быстрее ли синхронизирован быстрый доступ к локальной базе данных. –