Ich habe einen Timer gestartet, wenn meine Hub-Verbindung in PushNotificationData
Methode von Client-Anforderungen eingerichtet ist.So stoppen Sie den Timer bei OnDisconnected Ereignis in SignalR
Wie Timer-Intervall, holt es die Datensätze aus der Datenbank und Push an die Clients. , aber wenn die Verbindung getrennt wurde, muss dieser Timer gestoppt werden, anstatt kontinuierlich zu ziehen.
So habe ich OnDisconnected Ereignis verwendet, um den Timer zu stoppen. aber leider Timer nicht gestoppt zu werden
hier ist mein Code:
public class NotifyHub : Hub
{
private string ConnectionId;
private int UserId;
private int UserTypeId;
Timer timer = new Timer();
public override Task OnConnected()
{
ConnectionId = Context.ConnectionId;
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
timer.Stop();
timer.Enabled = false;
//logic code removed for brevity
return base.OnDisconnected(stopCalled);
}
public void PushNotificationData(Int32 userId, Int16 userTypeId)
{
UserId = userId;
UserTypeId = userTypeId;
ConnectionId = Context.ConnectionId;
timer.Elapsed += Timer_Elapsed1;
timer.Interval = 6000;
timer.Enabled = true;
timer.Start();
}
private void Timer_Elapsed1(object sender, ElapsedEventArgs e)
{
var notificationParams = new PushNotificationRequest
{
FilterProperty = new Common.Filters.FilterProperty { Offset = 0, RecordLimit = 0, OrderBy = "datechecked desc" },
Filters = new List<Common.Filters.FilterObject> { new Common.Filters.FilterObject { LogicOperator = 0, ConditionOperator = 0, Function = 0, FieldName = "", FieldValue = "", FieldType = 0 } }
};
using (INotificationManager iNotifity = new NotificationManager())
{
var taskTimer = Task.Run(async() =>
{
var NotificationResult = iNotifity.GetPushNotificationData(notificationParams, UserId, UserTypeId);
//Sending the response data to all the clients based on ConnectionId through the client method NotificationToClient()
Clients.Client(ConnectionId).NotificationToClient(NotificationResult);
//Delaying by 6 seconds.
await Task.Delay(1000);
//}
});
}
}
}
Wenn ich es debuggen, es zeigt Timer enabled=true
auch nach OnDisconnected
Brände.
der Moment OnDisconneted
ausgeführt wird, kann ich sehen, dass Timer aktualisiert enabled=false
. nachdem es aus dem OnDisconnected
timer.enabled
herausgekommen ist, bekam true
wieder.
Sie müssen diesen Entwurf umgestalten. Hubs sind nicht dazu gedacht, den Status beizubehalten. –