我的客户端(使用SignalR)连接到多台服务器,并且每个服务器都有一个CancellationTokenSource,在连接中断等情况下被取消
在某些功能中,我想等待(即trace = toList
),但是如果所有连接令牌都处于已取消状态(即甚至没有一台已连接的服务器),我希望延迟退出。
如何实现? await Task.Delay(1000, token)
提供了CancellationTokenSource
,但是当任何个源令牌处于取消状态而不是 all 时,生成的令牌将处于取消状态。 >
答案 0 :(得分:1)
我认为此解决方案可能有效-尽管通常不应该使用取消令牌。我尚未验证处理逻辑,因此您可能需要仔细检查。
var tokens = ...;
var all = new CancellationTokenSource();
void OnCancel()
{
if (tokens.All(token => token.IsCancellationRequested))
all.Cancel();
}
var registrations = new List<CancellationTokenRegistration>();
foreach (var token in tokens)
registrations.Add(token.Register(OnCancel));
all.Register(() =>
{
foreach (var registration in registrations)
registration.Dispose();
});
// Use the token
哦,还有一件事-如果您在注册回调时所有令牌都已被取消,我不确定这将如何表现。