如何:错开SignalR客户端.c#中的[函数]调用
本文关键字:函数 调用 中的 错开 SignalR 客户端 如何 | 更新日期: 2023-09-27 18:13:25
我有一个像这样的基本函数:
public void AllDataUpdated()
{
Clients.Others.allDataUpdated();
}
现在,我想在每个调用之间添加半秒的延迟。但是,我不想这样做只是锁定我的web服务器。
我的第一反应是:
async Task SendWithDelay(var other, var timeout)
{
await Task.Delay(timeout);
other.allDataUpdated();
}
和在我的public void AllDataUpdated()
函数中相互迭代,并增加每次迭代的超时。这是正确的方法吗?我应该如何做到这一点,不会锁定我的web服务器与这个过程,但会交错信号发出?
谢谢!
EDIT:我希望的结果是client_0在0ms时获得此消息,然后client_1在500ms时获得此消息,等等。都来自同一个呼叫AllDataUpdated()
// synchronization primitive
private readonly object syncRoot = new object();
// the timer for 500 miliseconds delay
private Timer notificator;
// public function used for notification with delay
public void NotifyAllDataUpdatedWithDelay() {
// first, we need claim lock, because of accessing from multiple threads
lock(this.syncRoot) {
if (null == notificator) {
// notification timer is lazy-loaded
notificator = new Timer(500);
notificator.Elapse += notificator_Elapsed;
}
if (false == notificator.Enabled) {
// timer is not enabled (=no notification is in delay)
// enabling = starting the timer
notificator.Enabled = true;
}
}
}
private void notificator_Elapsed(object sender, ElapsedEventArgs e) {
// first, we need claim lock, because of accessing from multiple threads
lock(this.syncRoot) {
// stop the notificator
notificator.Enabled = false;
}
// notify clients
Clients.Others.allDataUpdated();
}