3
如何处理MVC中的子动作的线程异常?从子异步方法MVC句柄异常
在这个例子中从MakePayment方法的异常没有被调用动作的捕获处理:
动作在控制器:
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);
}
Payment类:
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;
});
}
}
谢谢你的任何指导。
是什么让你认为抛出异常并且没有被处理? – 2014-10-08 09:57:15
通过在ASP.NET应用程序中使用'Task.Run',您将付出复杂性和线程切换的成本,而没有任何好处。 – 2014-10-08 09:58:50