gpt4 book ai didi

c# - 如果 CancellationToken 是一个 struct 并通过 Value 传递,它是如何更新的?

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

我看到 CancellationToken 是一个结构体 https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken?view=netframework-4.7.1

如果我按值将结构传递给新函数,则不应在调用者中对其进行修改。因此,如果我正在传递 CancellationTokenSource(按值),那么我调用 cts.cancel(),具有该 token 的 copy 的方法如何被通知它已被取消?它不应该只有在我们通过引用传递时才有效吗?

例如:

public static void Main()
{
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);
cts.cancel();
}

public void SomeCancellableOperation(CancellationToken token) {
...
token.ThrowIfCancellationRequested();
...
}

最佳答案

可以查看CancellationToken的源代码.基本思想是 token 仅存储对 CancellationTokenSource 的引用。

internal CancellationToken(CancellationTokenSource source)
{
m_source = source;
}

CancellationTokenSource 是取消时修改的内容。检查 token 是否被取消真的只是回到源头:

public bool IsCancellationRequested 
{
get
{
return m_source != null && m_source.IsCancellationRequested;
}
}

关于c# - 如果 CancellationToken 是一个 struct 并通过 Value 传递,它是如何更新的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48135226/

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