gpt4 book ai didi

c# - 我是否应该始终将 CancellationToken 添加到我的 Controller 操作中?

转载 作者:太空狗 更新时间:2023-10-29 19:40:26 26 4
gpt4 key购买 nike

无论操作时间长短,始终在我的操作中添加 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) 吗?

最佳答案

Should I always add CancellationToken to my controller actions?

没有。你不应该总是。

在 ASP.NET Core MVC Controller 中使用 CancellationTokens
https://andrewlock.net/using-cancellationtokens-in-asp-net-core-mvc-controllers/

Whether this is correct behaviour will depend on your app. If the request modifies state, then you may not want to halt execution mid-way through a method. On the other hand, if the request has no side-effects, then you probably want to stop the (presumably expensive) action as soon as you can.

因此,如果您有如下所示的方法/操作(已简化);

await ProcessOrder();
await UpdateInventory();

您不想在处理订单时取消订单,如果这样,订单可以完成,但如果用户通过隧道并失去互联网连接,您将不会更新库存。

当操作不能包含在类似于模式的工作单元(例如分布式系统)中并且应该尽量减少取消时,这一点尤其重要。

关于c# - 我是否应该始终将 CancellationToken 添加到我的 Controller 操作中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50329618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com