gpt4 book ai didi

c# - 如何将 CancellationToken 传递给 WebApi 操作?

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:27 24 4
gpt4 key购买 nike

我正在向 WebApi 发出如下请求:

var response = client.PostAsJsonAsync(url, dto).Result;

我在 Controller 操作中使用 HostingEnvironment,这样我就可以在后台线程中完成工作,并将 IIS 的取消 token 传递给我的服务方法,如下所示:

public IHttpActionResult MyAction(SearchDto dto)
{
HostingEnvironment.QueueBackgroundWorkItem(async ct =>
{
//Do background work
var result = await myService.DoWorkAsync(dto, ct);
});

return Ok();
}

现在我想从客户端传递一个取消 token ,以便用户可以取消请求,所以我创建了一个 CancellationTokenSource 并在客户端做了以下更改:

var response = client.PostAsJsonAsync(url, dto, cts.Token).Result;

以及 Action 的改变:

public IHttpActionResult MyAction(SearchDto dto, CancellationToken ct)
{
HostingEnvironment.QueueBackgroundWorkItem(async ct =>
{
//Do background work
var result = await myService.DoWorkAsync(dto, ct);
});

return Ok();
}

我的问题是这条线:

HostingEnvironment.QueueBackgroundWorkItem(async ct =>

如果我需要使用传递给操作的 ct,我该如何使用 IIS 需要传递给后台线程的 ct

最佳答案

您需要做的是组合您获得的两个取消 token ,第一个来自客户端,第二个来自 HostingEnvironment。你可以用这个来做到这一点 CancellationTokenSource.CreateLinkedTokenSource方法

public IHttpActionResult MyAction(SearchDto dto, CancellationToken ct1)
{
HostingEnvironment.QueueBackgroundWorkItem(async ct2 =>
{
using (var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(ct1, ct2))
{
var result = await myService.DoWorkAsync(dto, linkedCts.Token);
}
});

return Ok();
}

关于c# - 如何将 CancellationToken 传递给 WebApi 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54158361/

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