我不确定在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);
}它们之间有什么不同?
发布于 2014-09-26 11:18:13
第一个示例采用MVC传递给它的CancellationToken。我认为第二个例子根本行不通。第三个示例从ASP.NET获取两个CancellationToken并将它们组合在一起。
您应该使用第一个示例,可能也使用AsyncTimeoutAttribute。AFAIK中,Response.ClientDisconnectedToken存在一个错误,导致无法在生产代码中使用它。
就“为什么”而言,它允许取消请求(例如,如果它们已经进行了太长时间)。对于同步方法,ASP.NET将只取消( Thread.Abort )分配给请求的线程;对于异步方法,ASP.NET必须更好,并且只设置一个取消令牌。
https://stackoverflow.com/questions/26051199
复制相似问题