我有一个ASP.NET MVC 3操作方法,它接受HTTP POST中的HttpFileCollectionBase
。如何激发异步任务,但在返回ActionResult之前等待所有回调?
在这种方法中,我需要调整大小和上传图像3次。
的操作方法目前看起来是这样的:
public ActionResult ChangeProfilePicture()
{
var fileUpload = Request.Files[0];
ResizeAndUpload(fileUpload.InputStream, Size.Original);
ResizeAndUpload(fileUpload.InputStream, Size.Profile);
ResizeAndUpload(fileUpload.InputStream, Size.Thumb);
return Content("Success", "text/plain");
}
基本上这是用户的个人资料页,在这里他们改变他们的个人资料照片。上传通过jQuery AJAX发生。
现在,我如何才能将三个ResizeAndUpload
调用作为异步任务触发,但在所有三个任务完成之前不会返回操作结果?
以前我一直在使用Task.Factory.StartNew
来触发异步任务,但那是当我不在乎等待结果。
任何想法?
调整大小和上传做两两件事:1)使用GDI,2)上载图像以亚马逊调整大小图像。 GDI的速度很快,这是亚马逊上传需要一段时间(对于2 MB文件,大约需要10秒)。所以这就是为什么我想要异步做它们。所以没有阻塞,只是S3服务器上传滞后。 – RPM1984 2011-06-01 00:28:45
上传到Amazon的代码是异步的吗?如果不是,那么这三个线程就会坐在那里,在等待亚马逊响应时被阻塞。这并不好,特别是如果这个Action可以被多个请求同时调用。看看你是否可以将这些调用转换为异步调用。它可能会使事情变得复杂一点,但非常值得... – BFree 2011-06-01 00:32:26
是的,亚马逊上传是同步的。但我想等待它,因为我想使用客户端脚本来刷新用户的个人资料照片。当然,另一种方法是在不关心回调的情况下进行上传异步操作,并且只会显示“您的上传已排队等待处理”等信息 – RPM1984 2011-06-01 00:35:27