首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC 5中的异步操作

MVC 5中的异步操作
EN

Stack Overflow用户
提问于 2014-09-26 10:36:25
回答 1查看 1.1K关注 0票数 3

我不确定在MV5中使用异步操作的正确方式是什么。

我不知道该用哪一个。

这一点:

代码语言:javascript
复制
public async Task<ActionResult> Index(CancellationToken ct)
{
    var result = await service.GetData(ct);
    return View(result);
}

这一点:

代码语言:javascript
复制
public async Task<ActionResult> Index(CancellationTokenSource cts)
{
    var result = await service.GetData(cts.Token);
    return View(result);
}

或者这样:

代码语言:javascript
复制
public async Task<ActionResult> Index()
{
    var cts = CancellationTokenSource.CreateLinkedTokenSource(Request.TimedOutToken, Response.ClientDisconnectedToken);

    var result = await service.GetData(cts.Token);
    return View(result);
}

它们之间有什么不同?

EN

回答 1

Stack Overflow用户

发布于 2014-09-26 11:18:13

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

您应该使用第一个示例,可能也使用AsyncTimeoutAttribute。AFAIK中,Response.ClientDisconnectedToken存在一个错误,导致无法在生产代码中使用它。

就“为什么”而言,它允许取消请求(例如,如果它们已经进行了太长时间)。对于同步方法,ASP.NET将只取消( Thread.Abort )分配给请求的线程;对于异步方法,ASP.NET必须更好,并且只设置一个取消令牌。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26051199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档