【发布时间】:2018-10-24 01:44:20
【问题描述】:
无论操作是否长,始终在我的操作中添加 CancellationToken 是一个好习惯吗?
我目前正在将它添加到每个操作中,我不知道它是对还是错。
[ApiController]
[Route("api/[controller]")]
public class DummiesController : ControllerBase
{
private readonly AppDbContext _dbContext;
public DummyController(AppDbContext dbContext)
{
_dbContext = dbContext;
}
[HttpGet("{id}")]
public async Task<ActionResult<Dummy>> GetAsync(int id, CancellationToken ct) // <<----- should I always do this?
{
var dummy = await _dbContext.Dummies.AsNoTracking().SingleOrDefaultAsync(e=>e.Id == id, ct);
if (dummy == null) return NotFound();
return dummy;
}
}
还有必要加CancellationToken ct = default(CancellationToken)吗?
【问题讨论】:
-
如果要使用就添加...如果您不打算取消操作,那您为什么要添加它?
-
传递
CancellationToken对象本身并不会神奇地取消任何东西。您必须自己取消。 -
@FCin 在 ASP.NET Core 控制器中执行的操作:andrewlock.net/…
-
好吧,我不知道。将它添加到长时间运行的方法中是合理的。如果您的方法需要大约 50 毫秒,那么它不会增加任何好处。
-
我不明白。这是如何基于意见的?前两个答案通过多个参考提供了很好的洞察力。第二个最佳答案解释了为什么总是为操作放置取消标记是一个坏主意,这在某些情况下非常重要。
标签: c# asp.net-core asp.net-core-mvc asp.net-core-webapi cancellation-token