如何处理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;
});
}
}
感谢您提供任何指导。
答案 0 :(得分:1)
我知道这是一个古老的问题,但我暂时没有像评论中所说的那样支持。
除了那个无聊的回答,我建议您阅读本文https://msdn.microsoft.com/hu-hu/magazine/dn683793(en-us).aspx,了解c#6中的try / catch异步方法中的新闻。
现在我认为没有理由在您的示例中使用Task.Run()
。当你应该使用Task.Run()
时,一个明显的例子就是当你不想在进行同步的CPU繁重工作时阻止你的UI线程。在您的情况下,您没有任何UI线程。