Есть ли эффективный способ загрузить файл и сохранить его на диск в «фоновом» режиме, не блокируя текущее выполнение действия в контроллере mvc?
В настоящее время у меня работает следующий пример кода:
public ActionResult Index()
{
InitiateDownload();
var model = GetModel();
return View(model);
}
private void InitiateDownload()
{
Task.Run(() => DownloadAndSaveFileAsync()).ConfigureAwait(false);
}
private async Task DownloadAndSaveFileAsync()
{
var response = await GetResponse();
using (var fileStream = new FileStream("c:\\file.zip", FileMode.Create, FileAccess.Write, FileShare.None))
{
await response.Content.CopyToAsync(fileStream).ConfigureAwait(false);
}
}
public async Task<HttpResponseMessage> GetResponse()
{
var client = new HttpClient();
client.BaseAddress = new Uri("http://someUrl.com");
return await client.GetAsync("someResourceEndPoint").ConfigureAwait(false);
}
Я прочитал несколько мест, где вы не должны использовать Task.Run на сервере (в рабочем потоке), поэтому мне было интересно, является ли этот пример масштабируемым (например, если он получает 10 запросов каждую секунду) или надежным, или есть ли какие-либо подходящие способ сделать это так?
Спасибо