Как использовать простой тайм-аут с Rx .NET / Dispose необходимо? - PullRequest
1 голос
/ 25 февраля 2011

Какой самый простой способ поднять огонь и забыть обратный вызов через 3 секунды с Rx .NET. Я заметил, что это работает, но я должен избавиться от этого или что-то? Я не уверен.

Observable.Timer(TimeSpan.FromSeconds(3)).Subscribe(x => Console.WriteLine("Fired"));

Ответы [ 3 ]

4 голосов
/ 25 февраля 2011

Вот и все, я бы пометил твой вопрос как ответ, если бы мог;).

Что касается утилизации, вам обычно нужно утилизировать подписку, если:

  • вы подписываетесь на наблюдаемое, которое принадлежит контейнеру с более длительным сроком службы, чем компонент подписки.
  • вам нужно "отписаться" раньше.

Ваш образец не является одним из них, поэтому не беспокойтесь об отмене подписки.

0 голосов
/ 03 октября 2012

Просто любопытно, но ваш вопрос говорит «тайм-аут», а не «таймер».То, что у вас есть, - это событие, которое происходит в данное время, а не ожидание события, которое прекращается после определенного времени.Хотя кажется, что вы довольны ответом, я подумал, что проверю ясность.

Чтобы сделать это позже, вы можете добавить .Timeout (Timespan) к наблюдаемой последовательности.Как упоминал Джеймс Уорлд, здесь явно присутствует планировщик.Пока вы сохраняете планировщик неявным, вы найдете больший юнит-тестирование.В идеале вы должны предоставить планировщик, который вы хотите использовать, для используемого метода таймера / интервала / тайм-аута.

0 голосов
/ 26 сентября 2012

Просто для удовольствия, вот другая альтернатива, которая использует Rx, но помещает планировщик вперед и в центр и пропускает бизнес подписки и ненужный аргумент в действии. Как и раньше, вы можете использовать возвращенный IDisposable, чтобы отменить действие.

Scheduler.Default.Schedule(TimeSpan.FromSeconds(3), () => Console.WriteLine("Fired"));
...