【发布时间】:2017-02-21 16:54:20
【问题描述】:
我有一个名为 Repository 的类,它处理 CSV 文件并从解析的值创建对象。
这个类中有两个列表属性:
public static List<Product> ProductsList { get; set; }
public static List<Category> CategoriesList { get; set; }
Repository 类中有一个方法,它解析发布的 CSV 文件以创建产品和类别列表,这些产品和类别分别分配给方法内的 ProductsList 和 CategoriesList。
public static void CSVToList(HttpPostedFileBase CSVFile){}
然后在这个类中还有另一个方法将产品和类别保存到dbContext中。这两个方法都是从Controller中的Repository类外部调用的。
public static void SaveProducts()
{
foreach(var item in ProductsList)
{
db.Products.Add(item);
}
foreach(var item in CategoriesList)
{
db.Categories.Add(item);
}
await db.SaveChangesAsync();
}
当我运行应用程序并使用 CSV 文件发送发布请求时,我收到此错误:
此时无法启动异步操作。异步操作只能在异步处理程序或模块内或在页面生命周期中的某些事件期间启动。如果在执行 Page 时发生此异常,请确保将 Page 标记为 。此异常还可能表示尝试调用“async void”方法,在 ASP.NET 请求处理中通常不支持该方法。相反,异步方法应该返回一个 Task,调用者应该等待它。
Source Error:
Line 348: {
Line 349: Repository.CSVToList(viewModel.CSVFile);
Line 350: Repository.SaveProducts();
Line 351:
Line 352: return RedirectToAction("Index", new { ManageMessageId.DataImportSuccess });
Source File: C:\src\smokindonut\Valueville\ValueVille\Controllers\ManageController.cs Line: 350
我试图使控制器方法成为一个异步任务,调用者对存储库保存方法等待:
public async Task<ActionResult> AddCSVData(){
await Repository.SaveProducts();
}
我也尝试让 SaveProducts() 方法也成为一个异步任务,但它一直使方法名称以“async”开头 - 每次都给出相同的错误。
【问题讨论】:
标签: c# csv asynchronous