我正在使用 MVC4 ApiController 将数据上传到 Azure Blob。这是示例代码:
public Task PostAsync(int id)
{
return Task.Factory.StartNew(() =>
{
// CloudBlob.UploadFromStream(stream);
});
}
这段代码是否有意义?我认为 ASP.NET 已经在工作线程中处理请求,因此在另一个线程中运行 UploadFromStream 似乎没有意义,因为它现在使用两个线程来运行此方法(我假设原始工作线程正在等待这个 UploadFromStream完成?)
所以我的理解是,只有当我们使用一些内置的异步方法(例如 HttpClient.GetAsync 或 SqlCommand.ExecuteReaderAsync)时,异步 ApiController 才有意义。这些方法可能在内部使用 I/O 完成端口,因此它可以在执行实际工作时释放线程。所以我应该把代码改成这个?
public Task PostAsync(int id)
{
// only to show it's using the proper async version of the method.
return TaskFactory.FromAsync(BeginUploadFromStream, EndUploadFromStream...)
}
另一方面,如果 Post 方法中的所有工作都是 CPU/内存密集型的,那么异步版本 PostAsync 将无助于请求的吞吐量。使用常规的“public void Post(int id)”方法可能会更好,对吧?
我知道这是很多问题。希望它能阐明我对 ASP.NET MVC 中异步使用的理解。谢谢。