MVC 5中的异步操作

时间:2014-09-26 02:36:25

标签: .net asp.net-mvc-5 async-await

我不确定在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);
}

他们之间有什么区别?

1 个答案:

答案 0 :(得分:3)

第一个示例采用MVC传递给它的CancellationToken。我相信的第二个例子根本不起作用。第三个示例从ASP.NET中获取两个CancellationToken并将它们组合在一起。

您应该使用第一个示例,也可能使用AsyncTimeoutAttribute。 AFAIK,Response.ClientDisconnectedToken存在一个阻止其在生产代码中使用的错误。

至于&#34;为什么&#34;是的,它允许取消请求(例如,如果他们已经进行了太长时间)。使用同步方法,ASP.NET将Thread.Abort分配给请求的线程;使用异步方法,ASP.NET必须更好,并且只需设置一个取消令牌。