我有一些代码,它导入一个csv文件并从数据创建数据库记录。使用标准的同步方法可以正常工作,但大型csv文件可能需要一段时间才能处理。使用异步等待,我想csv处理异步运行,所以用户不会卡在上传表单,直到处理完成。MVC异步等待长时间运行的数据库插入/更新
因此,用户将上传文件并立即转移到一个页面,该页面将显示一条消息以指示该文件正在导入。
这是我试过的。这是我的控制器的行动,获取表单POST:在本
public async Task<ActionResult> UploadBulkImportFile(BulkUploadCsvModel model, HttpPostedFileBase file)
{
...
我打电话,我要异步运行的功能:
await Task.Run(() => testAsyncMethod(csvmodel));
的testAsyncMethod()做了所有的数据库CRUD参与操作处理csv。
public void testAsyncMethod(IEnumerable<List<csvmodel>> model)
{
...
此代码的工作,但我前面的同步代码没有什么不同,即用户仍然必须等待,直到该文件被完全处理,所以它显然不正常。请注意,testAsyncMethod()中的代码不是异步代码,只是标准的数据库调用 - 我想知道如果这是我出错的地方。
这甚至可能在MVC?我是否使用异步等待错误的原因?
这不是如何异步工作... –
@ErikFunkenbusch - 照顾开导我? – markpsmith
斯蒂芬的博客文章,他链接到下面明确解释...但是,异步允许*服务器*继续做其他事情,而不是客户端(网络浏览器) –