gpt4 book ai didi

c# - 我可以使用 cancellationToken == CancellationToken.None 来检查 default(CancellationToken)

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

原因是如果它是CancellationToken.None,我需要添加一个超时(所以一个新的CancellationToken 来自CancellationTokenSource),例如

if (cancellationToken == CancellationToken.None)
{
var tokenSource = new CancellationTokenSource();
tokenSource.CancelAfter((int)_timeout.TotalMilliseconds);

cancellationToken = tokenSource.Token;
}

另一个想法是创建一个组合 token 。

更新。这样的东西行得通吗?我应该注意什么问题? GC 会做它需要做的事情吗?

public async Task<int> InternalActionAsync(CancellationToken token)
{
// do something with the token...
return 1;
}

public Task<int> ExternalActionAsync(CancellationToken token = default(CancellationToken))
{
var internalTokenSource =
new CancellationTokenSource((int)_timeout.TotalMilliseconds);
var linkedTokenSource =
CancellationTokenSource.CreateLinkedTokenSource(token,
internalTokenSource.Token);

return InternalActionAsync(linkedTokenSource.Token);
}

最佳答案

首先,查看 source code :

public static CancellationToken None
{
get { return default(CancellationToken); }
}

因此您可以放心地假设它们是相等的。

但是,如果用户没有要传递的 CancellationToken,也许您可​​以请求 CancellationToken? 而不是依赖 token 之间的默认相等性:

public Task<int> ExternalActionAsync(CancellationToken? token = null)
{
if (token == null)
{
var tokenSource = new CancellationTokenSource();
tokenSource.CancelAfter((int)_timeout.TotalMilliseconds);
token = tokenSource.Token;
}

return InternalActionAsync(token);
}

关于c# - 我可以使用 cancellationToken == CancellationToken.None 来检查 default(CancellationToken),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30541592/

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