【发布时间】:2014-12-02 12:23:16
【问题描述】:
如何处理 MVC 中子动作线程的异常?
在此示例中,来自 MakePayment 方法的异常未由调用操作的 catch 处理:
控制器中的操作:
public async Task<ActionResult> Payment()
{
try
{
var tokenId = "12345";
var order = new OrderViewModel
{
Amount = 10.00,
Description = "Widget",
Customer = 1
};
var payment = new PaymentService();
var model = await payment.MakeCharge(tokenId, order);
}
catch(Exception ex)
{
ViewBag.Message = ex.Message.toString();
return view("Failed");
}
return View(model);
}
支付类:
public class PaymentService
{
public async Task<Charge> MakeCharge(string tokenId, OrderViewModel order)
{
return await Task.Run(() =>
{
var myCharge = new ChargeCreateOptions
{
Amount = order.Amount,
Description = order.Description,
TokenId = tokenId
};
var chargeService = new ChargeService();
var charge = chargeService.create(mycharge);
return charge;
});
}
}
感谢您的指导。
【问题讨论】:
-
是什么让你认为异常被抛出而不被处理?
-
通过在 ASP.NET 应用程序中使用“Task.Run”,您付出了复杂性和线程切换的成本,却没有任何好处。
标签: asp.net-mvc exception-handling async-await