C# 如何在Web请求上传输CancellationToken

C# 如何在Web请求上传输CancellationToken,c#,asynchronous,asp.net-web-api,stateless,cancellation-token,C#,Asynchronous,Asp.net Web Api,Stateless,Cancellation Token,我正在研究如何通过WebAPI取消异步请求 最近我发现最新版本的WebApi(不是.NETCore)支持取消令牌。作为测试,我编写了这段代码 [HttpGet] [Route("LongRequest")] public async Task<string> VeryLongRequest(string Key, CancellationToken token) { for (int i = 0; i < 5; ++i) { if (false

我正在研究如何通过WebAPI取消异步请求

最近我发现最新版本的WebApi(不是.NETCore)支持取消令牌。作为测试,我编写了这段代码

[HttpGet]
[Route("LongRequest")]
public async Task<string> VeryLongRequest(string Key, CancellationToken token)
{
    for (int i = 0; i < 5; ++i)
    {
        if (false == token.IsCancellationRequested)
        {
            Thread.Sleep(5000);
        }
        else
        {
            Trace.WriteLine("Cancelled");
        }
    }

    return "Complete";
}
[HttpGet]
[路线(“长请求”)]
公共异步任务VeryLongRequest(字符串键、CancellationToken令牌)
{
对于(int i=0;i<5;++i)
{
if(false==token.IsCancellationRequested)
{
睡眠(5000);
}
其他的
{
Trace.WriteLine(“取消”);
}
}
返回“完成”;
}
当用户关闭窗口/刷新/或导航到新页面(不在SPA上)时,此代码起作用,取消令牌将更新

假设HTTP请求是无状态的,那么取消如何映射回请求


如何从客户端手动调用取消功能?

我想它是由asp.net检测到连接关闭时触发的。所以客户端只能通过关闭连接来影响这一点。@Evk,我认为它的触发器来自FIN或TCP连接的重置,但我不确定。我不确定如何手动调用thoughWell,这与我所说的差不多。您不能从客户端手动调用它(当然除了中止连接)。但是,如果您使用的是ajax,您可以在用户按下按钮时中止它,例如(有abort()方法),如果这就是从客户端手动调用取消的意思。@Evk感谢您的帮助。据我所知,这个信息似乎是正确的,如果你把它作为一个答案,我会把它标记为正确的。