我不确定在MV5中使用异步操作的正确方法是什么。
我不知道应该使用哪一个。
此:
public async Task<ActionResult> Index(CancellationToken ct)
{
var result = await service.GetData(ct);
return View(result);
}
此:
public async Task<ActionResult> Index(CancellationTokenSource cts)
{
var result = await service.GetData(cts.Token);
return View(result);
}
或者这个:
public async Task<ActionResult> Index()
{
var cts = CancellationTokenSource.CreateLinkedTokenSource(Request.TimedOutToken, Response.ClientDisconnectedToken);
var result = await service.GetData(cts.Token);
return View(result);
}
他们之间有什么区别?
答案 0 :(得分:3)
第一个示例采用MVC传递给它的CancellationToken
。我相信的第二个例子根本不起作用。第三个示例从ASP.NET中获取两个CancellationToken
并将它们组合在一起。
您应该使用第一个示例,也可能使用AsyncTimeoutAttribute
。 AFAIK,Response.ClientDisconnectedToken
存在一个阻止其在生产代码中使用的错误。
至于&#34;为什么&#34;是的,它允许取消请求(例如,如果他们已经进行了太长时间)。使用同步方法,ASP.NET将Thread.Abort
分配给请求的线程;使用异步方法,ASP.NET必须更好,并且只需设置一个取消令牌。