有沒有一種有效的方式來下載文件並以「背景」方式將其保存在磁盤上,而不會阻止當前在mvc控制器中執行的動作?在同步的asp.net控制器中使用Task.Run
目前,我有下面的示例代碼的工作:
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個請求)還是可靠的,或者是否有任何適當的方式來實現它?
由於
使用隊列來處理任務只是爲了安全 – Ramie