Предполагая, что вы хотите использовать SignalR
(вы добавили тег), простой таймер может сделать работу:
public sealed class MatchingSupervisor
{
private static readonly ILog Log = LogManager.GetLogger(typeof(MatchingSupervisor));
private readonly IHubContext _hub;
private readonly Timer _timer;
#region Singleton
public static MatchingSupervisor Instance => SupervisorInstance.Value;
// Lazy initialization to ensure SupervisorInstance creation is threadsafe
private static readonly Lazy<MatchingSupervisor> SupervisorInstance = new Lazy<MatchingSupervisor>(() =>
new MatchingSupervisor(GlobalHost.ConnectionManager.GetHubContext<YourHubClass>()));
private MatchingSupervisor(IHubContext hubContext)
{
_hub = hubContext;
_timer = new Timer(Run, null, 0, Timeout.Infinite);
}
#endregion
private async void Run(object state)
{
// TODO send messages to clients
// you can use _timer.Change(newInterval, newInterval) here
// if you need to change the next interval
var newInterval = TimeSpan.FromSeconds(60);
_timer.Change(newInterval, newInterval);
}
}
Чтобы обеспечить перезагрузится таймер, когда система или приложение перезапускается (система пошла вниз, приложение рециркуляцию, и т.д.), вы должны получить экземпляр в классе Owin запуска:
public class Startup
{
private MatchingSupervisor _conversationManager;
public void Configuration(IAppBuilder app)
{
// TODO app configuration
// Ensure supervisor starts
_supervisor = MatchingSupervisor.Instance;
}
}
Это похоже на хороший подход. В моем случае у меня есть сценарий, например message1: send, а затем подождите 30 секунд, отправьте сообщение2, а затем подождите 60 секунд и т. Д. Должен ли я предоставить этот параметр времени в четвертом аргументе инициализатора таймера? – Seamus
Ну, это зависит от логики вашего приложения. Собираетесь ли вы отправлять эти сообщения всем подключенным пользователям одновременно? В этом случае вы можете изменить интервал таймера каждый раз, когда вы отправляете сообщение, или вы можете просто использовать таймер для его запуска один раз и создать новый. Если вам нужно отправлять сообщения определенным пользователям с разными интервалами, это будет другой вопрос, не связанный с отправкой файлов с сервера на клиент. – xleon
Отредактирован ответ на изменение интервала – xleon