У меня был этот код для обработки больших файлов (это было для загрузки большого файла CSV):
public async Task<IActionResult> UploadAsync(IFormFile file)
{
// Ensure the file has contents before processing.
if (file == null || file.Length == 0)
throw new ApiException("Csv file should not be null", HttpStatusCode.BadRequest)
.AddApiExceptionResponseDetails(ErrorTypeCode.ValidationError, ErrorCode.BelowMinimumLength, SOURCE);
// Ensure the file is not over the allowed limit.
if (file.Length > (_settings.MaxCsvFileSize * 1024))
throw new ApiException("Max file size exceeded, limit of " + _settings.MaxCsvFileSize + "mb", HttpStatusCode.BadRequest)
.AddApiExceptionResponseDetails(ErrorTypeCode.ValidationError, ErrorCode.ExceedsMaximumLength, SOURCE);
// Ensure the file type is csv and content type is correct for the file.
if (Path.GetExtension(file.FileName) != ".csv" ||
!Constants.CsvAcceptedContentType.Contains(file.ContentType.ToLower(CultureInfo.InvariantCulture)))
throw new ApiException("Csv content only accepted").AddApiExceptionResponseDetails(ErrorTypeCode.ValidationError, ErrorCode.Invalid, SOURCE);
// Read csv content.
var content = await file.ReadCsvAsync<OrderCsvResponseDto>() as CsvProcessedResponseDto<OrderCsvResponseDto>;
await ProcessBulkUpload(content);
// Return information about the csv file.
return Ok(content);
}
internal async Task ProcessBulkUpload(CsvProcessedResponseDto<OrderCsvResponseDto> content)
{
// do some processing...
}
Существуют настройки web.config для увеличения разрешенного времени загрузки файла, это может помочь: Как увеличить максимальный размер загружаемого файла в ASP.NET?
Если ваш запрос превышает максимально допустимое время ожидания, данные не будут возвращены вашему абоненту, как ожидалось!
Если вы хотите выполнить код «запустил и забыл» из C #, вы можете сделать это:
public static void FireAndForget(this Task task)
{
Task.Run(async() => await task).ConfigureAwait(false);
}
Javascript:
xhr.onreadystatechange = function() { xhr.abort(); }
AngularJS:
var defer = $q.defer();
$http.get('/example', { timeout: defer.promise }).success(callback);
// [...]
defer.resolve();
Некоторые советы по асинхронности / ожиданию для Js: http://2ality.com/2016/10/async-function-tips.html