本文整理汇总了C#中ICancelable类的典型用法代码示例。如果您正苦于以下问题:C# ICancelable类的具体用法?C# ICancelable怎么用?C# ICancelable使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
ICancelable类属于命名空间,在下文中一共展示了ICancelable类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: PeriodicAction
IEnumerator PeriodicAction(TimeSpan period, Action action, ICancelable cancellation)
{
// zero == every frame
if (period == TimeSpan.Zero)
{
while (true)
{
yield return null; // not immediately, run next frame
if (cancellation.IsDisposed) yield break;
MainThreadDispatcher.UnsafeSend(action);
}
}
else
{
var seconds = (float)(period.TotalMilliseconds / 1000.0);
var yieldInstruction = new WaitForSeconds(seconds); // cache single instruction object
while (true)
{
yield return yieldInstruction;
if (cancellation.IsDisposed) yield break;
MainThreadDispatcher.UnsafeSend(action);
}
}
}
示例2: InternalScheduleTellOnce
protected override void InternalScheduleTellOnce(TimeSpan delay, ICanTell receiver, object message, IActorRef sender, ICancelable cancelable)
{
var cancellationToken = cancelable == null ? CancellationToken.None : cancelable.Token;
InternalScheduleOnce(delay, () =>
{
receiver.Tell(message, sender);
}, cancellationToken);
}
示例3: ClusterMetricsCollector
public ClusterMetricsCollector(IActorRef publisher)
{
_publisher = publisher;
_cluster = Cluster.Get(Context.System);
Collector = MetricsCollector.Get(Context.System.AsInstanceOf<ExtendedActorSystem>(), _cluster.Settings);
LatestGossip = MetricsGossip.Empty;
Nodes = ImmutableHashSet.Create<Address>();
_metricsCancelable = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(
_cluster.Settings.PeriodicTasksInitialDelay.Max(_cluster.Settings.MetricsInterval),
_cluster.Settings.MetricsInterval, Self, InternalClusterAction.MetricsTick.Instance, Self);
_gossipCancelable = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(
_cluster.Settings.PeriodicTasksInitialDelay.Max(_cluster.Settings.GossipInterval),
_cluster.Settings.GossipInterval, Self, InternalClusterAction.GossipTick.Instance, Self);
Receive<InternalClusterAction.GossipTick>(tick => Gossip());
Receive<InternalClusterAction.MetricsTick>(tick => Collect());
Receive<MetricsGossipEnvelope>(envelope => ReceiveGossip(envelope));
Receive<ClusterEvent.CurrentClusterState>(state => ReceiveState(state));
Receive<ClusterEvent.MemberUp>(up => AddMember(up.Member));
Receive<ClusterEvent.MemberRemoved>(removed => RemoveMember(removed.Member));
Receive<ClusterEvent.MemberExited>(exited => RemoveMember(exited.Member));
Receive<ClusterEvent.UnreachableMember>(member => RemoveMember(member.Member));
Receive<ClusterEvent.ReachableMember>(member =>
{
if (member.Member.Status == MemberStatus.Up) AddMember(member.Member);
});
Receive<ClusterEvent.IMemberEvent>(@event => { }); //not interested in other types of member event
}
示例4: SignalRClusterStatusActor
public SignalRClusterStatusActor()
{
ClusterStatusTeller = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(TimeSpan.FromSeconds(5),
TimeSpan.FromSeconds(1), Self, new ClusterStatus.SendCurrentClusterState(), Self);
Ready();
}
示例5: PreStart
protected override void PreStart()
{
_cluster = Cluster.Get(Context.System);
_cancelStatusUpdates = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(2), Self, new SendState(), Self);
base.PreStart();
}
示例6: PerformanceCounterActor
public PerformanceCounterActor(string seriesName, Func<PerformanceCounter> performanceCounterGenerator)
{
_seriesName = seriesName;
_performanceCounterGenerator = performanceCounterGenerator;
_subscriptions = new HashSet<IActorRef>();
_cancelPublishing = new Cancelable(Context.System.Scheduler);
}
示例7: PerformanceCounterMonitor
/// <summary>
/// Create a new <see cref="PerformanceCounterMonitor"/> actor.
/// </summary>
/// <param name="seriesName">
/// The name of the data series that tracks the performance counter's value.
/// </param>
/// <param name="performanceCounterFactory">
/// A factory delegate that creates the <see cref="PerformanceCounter"/> to monitor.
/// </param>
public PerformanceCounterMonitor(string seriesName, Func<PerformanceCounter> performanceCounterFactory)
{
if (String.IsNullOrWhiteSpace(seriesName))
throw new ArgumentException("Argument cannot be null, empty, or entirely componsed of whitespace: 'seriesName'.", nameof(seriesName));
if (performanceCounterFactory == null)
throw new ArgumentNullException(nameof(performanceCounterFactory));
_seriesName = seriesName;
_performanceCounterFactory = performanceCounterFactory;
_cancelPublishing = new Cancelable(Context.System.Scheduler);
Receive<GatherMetrics>(_ =>
{
Metric metric = new Metric(
_seriesName,
_performanceCounter.NextValue()
);
foreach (IActorRef subscriber in _subscribers)
subscriber.Tell(metric);
});
Receive<SubscribePerformanceCounter>(request =>
{
_subscribers.Add(request.Subscriber);
});
Receive<UnsubscribePerformanceCounter>(request =>
{
_subscribers.Remove(request.Subscriber);
});
}
示例8: TopicLike
protected TopicLike(TimeSpan emptyTimeToLive)
{
Subscribers = new HashSet<IActorRef>();
EmptyTimeToLive = emptyTimeToLive;
PruneInterval = new TimeSpan(emptyTimeToLive.Ticks / 2);
PruneCancelable = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(PruneInterval, PruneInterval, Self, Prune.Instance, Self);
}
示例9: PerformanceCounterActor
public PerformanceCounterActor(string seriesName, Func<PerformanceCounter> performanceCounterGenerator)
{
_seriesName = seriesName;
_performanceCounterGenerator = performanceCounterGenerator;
_subscriptions = new HashSet<IActorRef>();
_cancelPublishing = new Cancelable(Context.System.Scheduler);
Receive<GatherMetrics>(m =>
{
//publish latest counter value to all subscribers
var metric = new Metric(_seriesName, _counter.NextValue());
foreach (var sub in _subscriptions)
sub.Tell(metric);
});
Receive<SubscribeCounter>(sc =>
{
// add a subscription for this counter
// (it's parent's job to filter by counter types)
_subscriptions.Add(sc.Subscriber);
});
Receive<UnsubscribeCounter>(uc =>
{
// remove a subscription from this counter
_subscriptions.Remove(uc.Subscriber);
});
}
示例10: Timeout
private void Timeout()
{
_timedOut = true;
_cancelHeartbeat?.Cancel(false);
_cancelHeartbeat = null;
Context.Parent.Tell(new ConnectionMessages.ConnectionLost());
}
示例11: SignalRItemStatusActor
public SignalRItemStatusActor()
{
ItemSubscriberTeller = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(TimeSpan.FromSeconds(5),
TimeSpan.FromSeconds(2), Self, new SubscribeToWorkers(), Self);
Ready();
}
示例12: receiveEngineRunCommand
private void receiveEngineRunCommand(MessageEngineRunCommand msg)
{
MessageTick pulse = new MessageTick(0);
if (msg.RunCommand == EngineRunCommand.RunMax && _runState != TickEngineRunState.RunningMax)
{
cancelPulse();
_numberOfIncompleteSS = _subscribedActorSolarSystems.Count();
_runState = TickEngineRunState.RunningMax;
startTicksTimer();
receiveTick(pulse);
}
else if (msg.RunCommand == EngineRunCommand.RunPulse && _runState != TickEngineRunState.Running)
{
_runState = TickEngineRunState.Running;
_runCancel = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(0, 5, Self, pulse, ActorRefs.Nobody);
startTicksTimer();
receiveTick(pulse);
}
else if (msg.RunCommand == EngineRunCommand.Stop && _runState != TickEngineRunState.Stopped)
{
_runState = TickEngineRunState.Stopped;
cancelPulse();
_secondTimer.Stop();
}
}
示例13: ClusterServiceStatusActor
public ClusterServiceStatusActor()
{
_cancel = new CancellationTokenSource();
ClusterServiceStatusTeller = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(TimeSpan.FromSeconds(5),
TimeSpan.FromSeconds(1), Self, new GetServiceStatus(), Self);
Ready();
}
示例14: CancelReceiveTimeout
private void CancelReceiveTimeout()
{
if (_pendingReceiveTimeout != null)
{
_pendingReceiveTimeout.Cancel();
_pendingReceiveTimeout = null;
}
}
示例15: CheckReceiveTimeout
public void CheckReceiveTimeout()
{
CancelReceiveTimeout();
if (_receiveTimeoutDuration != null && !Mailbox.HasMessages)
{
_pendingReceiveTimeout = System.Scheduler.ScheduleTellOnceCancelable(_receiveTimeoutDuration.Value, Self, ReceiveTimeout.Instance, Self);
}
}