﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Еще раз про событийную модель</title>
  <id>~/topic/1631/eshshe-raz-pro-sobytiinuyu-model/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-18T10:29:48Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=1631" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/8554/</id>
    <title type="text">День добрый! Подскажите, проверка условия When и действие Do выполняются в одном потоке или в разных...</title>
    <published>2011-06-02T07:03:39Z</published>
    <updated>2011-06-02T07:03:39Z</updated>
    <author>
      <name>InsiderHSE</name>
      <uri>https://stocksharp.com/users/6099/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;День добрый! Подскажите, проверка условия When и действие Do выполняются в одном потоке или в разных?
Использую следующий код (трэйдер в асинхронном режиме):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;class MyStrategy : ActionStrategy
    {
        public MyStrategy(TimeSpan t)
        {
            _timeFrame = t;
        }
        
        private readonly TimeSpan _timeFrame;

        private CandleManager _candleManager;

        public CandleManager CandleManager
        {
            get { return _candleManager; }
            set
            {
                _candleManager = value;

                When(Signal1).Do(Action1)
                    .MakePeriodical(); // сделать событие периодичным
            }
        }

        private bool Signal1()
        {
            Debug.WriteLine(DateTime.Now.ToLongTimeString() + &amp;quot; - проверяем сигнал&amp;quot;);
            //проверяем, сдвинулись ли границы текущей свечки
            bool needchange = _timeFrame.GetCandleBounds(base.Trader).Max &amp;gt; _сandleBounds.Max;
            bool rez = _candleManager.GetTimeFrameCandle(Security, _timeFrame, _сandleBounds.Max) != null;
            //если текущая свечка сдвинулась, а предыдущая не была получна, значит не было сделок - получаем новые границы ожидаемой свечки
            if (!rez &amp;amp;&amp;amp; needchange)
            { _сandleBounds = _timeFrame.GetCandleBounds(base.Trader); }
            return rez;
        }
        private void Action1()
        {
            Debug.WriteLine(DateTime.Now.ToLongTimeString() + &amp;quot; - Запускаем действие&amp;quot;);

            // запоминаем новое время следущей свечки
            _сandleBounds = _timeFrame.GetCandleBounds(base.Trader);
        }

        private Range&amp;lt;DateTime&amp;gt; _сandleBounds;

        protected override void OnRunning()
        {
            Debug.WriteLine(DateTime.Now.ToLongTimeString() + &amp;quot; - вызван OnRunning&amp;quot;);
            // получаем границы текущей свечки
            _сandleBounds = _timeFrame.GetCandleBounds(base.Trader);
            _candleManager.CandlesFinished += (t,c) =&amp;gt;
                {
                    Debug.WriteLine(DateTime.Now.ToLongTimeString() + &amp;quot; - пришла свечка: &amp;quot; + c.First().Time.ToLongTimeString());
                };
            base.OnRunning();
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ожидается, что когда будет приходить новая свечка, будет запускаться действие. Однако на практике часто после прихода новой свечки действие запускается 2 раза (видимо потому что пока выполняется Do, When успевает еще раз провериться). А иногда после прихода свечки действие не запускается (например, 10:45:30, 10:45:44) (не понимаю почему =( )
Запускаю с интервалом 2 секунды и получаю следующий вывод:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10:44:18 - вызван OnRunning
10:44:19 - проверяем сигнал
10:44:20 - проверяем сигнал
10:44:21 - пришла свечка: 10:44:22
10:44:21 - проверяем сигнал
10:44:21 - Запускаем действие
10:44:22 - проверяем сигнал
10:44:22 - пришла свечка: 10:44:24
10:44:23 - проверяем сигнал
10:44:23 - Запускаем действие
10:44:24 - проверяем сигнал
10:44:25 - проверяем сигнал
10:44:26 - пришла свечка: 10:44:26
10:44:26 - проверяем сигнал
10:44:26 - Запускаем действие
10:44:27 - проверяем сигнал
10:44:27 - Запускаем действие
10:44:28 - пришла свечка: 10:44:30
10:44:28 - проверяем сигнал
10:44:28 - Запускаем действие
10:44:29 - проверяем сигнал
10:44:29 - Запускаем действие
10:44:30 - проверяем сигнал
10:44:31 - проверяем сигнал
10:44:32 - пришла свечка: 10:44:32
10:44:32 - проверяем сигнал
10:44:32 - пришла свечка: 10:44:34
10:44:33 - проверяем сигнал
10:44:33 - Запускаем действие
10:44:34 - проверяем сигнал
10:44:35 - пришла свечка: 10:44:36
10:44:35 - проверяем сигнал
10:44:35 - Запускаем действие
10:44:36 - проверяем сигнал
10:44:37 - пришла свечка: 10:44:38
10:44:37 - проверяем сигнал
10:44:37 - Запускаем действие
10:44:38 - пришла свечка: 10:44:40
10:44:38 - проверяем сигнал
10:44:38 - Запускаем действие
10:44:39 - проверяем сигнал
10:44:39 - Запускаем действие
10:44:40 - проверяем сигнал
10:44:41 - пришла свечка: 10:44:42
10:44:41 - проверяем сигнал
10:44:41 - Запускаем действие
10:44:42 - проверяем сигнал
10:44:43 - пришла свечка: 10:44:44
10:44:43 - проверяем сигнал
10:44:43 - Запускаем действие
10:44:44 - пришла свечка: 10:44:46
10:44:44 - проверяем сигнал
10:44:44 - Запускаем действие
10:44:45 - проверяем сигнал
10:44:45 - Запускаем действие
10:44:46 - пришла свечка: 10:44:48
10:44:46 - проверяем сигнал
10:44:46 - Запускаем действие
10:44:47 - проверяем сигнал
10:44:47 - Запускаем действие
10:44:48 - проверяем сигнал
10:44:49 - пришла свечка: 10:44:50
10:44:49 - проверяем сигнал
10:44:49 - Запускаем действие
10:44:50 - пришла свечка: 10:44:52
10:44:50 - проверяем сигнал
10:44:50 - Запускаем действие
The thread '&amp;lt;No Name&amp;gt;' (0x1734) has exited with code 0 (0x0).
10:44:51 - проверяем сигнал
10:44:51 - Запускаем действие
10:44:52 - проверяем сигнал
10:44:53 - проверяем сигнал
10:44:54 - проверяем сигнал
10:44:55 - проверяем сигнал
10:44:56 - проверяем сигнал
10:44:56 - пришла свечка: 10:44:54
10:44:57 - проверяем сигнал
10:44:57 - Запускаем действие
10:44:58 - проверяем сигнал
10:44:58 - пришла свечка: 10:45:00
10:44:59 - проверяем сигнал
10:44:59 - Запускаем действие
10:45:00 - проверяем сигнал
10:45:00 - пришла свечка: 10:45:02
10:45:01 - проверяем сигнал
10:45:01 - Запускаем действие
10:45:02 - проверяем сигнал
10:45:03 - пришла свечка: 10:45:04
10:45:03 - проверяем сигнал
10:45:03 - Запускаем действие
10:45:04 - проверяем сигнал
10:45:04 - пришла свечка: 10:45:06
10:45:05 - проверяем сигнал
10:45:05 - Запускаем действие
10:45:06 - проверяем сигнал
10:45:07 - проверяем сигнал
10:45:08 - проверяем сигнал
10:45:08 - пришла свечка: 10:45:08
10:45:09 - проверяем сигнал
10:45:09 - Запускаем действие
10:45:10 - пришла свечка: 10:45:12
10:45:10 - проверяем сигнал
10:45:10 - Запускаем действие
10:45:11 - проверяем сигнал
10:45:11 - Запускаем действие
10:45:12 - проверяем сигнал
10:45:12 - пришла свечка: 10:45:14
10:45:13 - проверяем сигнал
10:45:13 - Запускаем действие
10:45:14 - проверяем сигнал
10:45:14 - пришла свечка: 10:45:16
10:45:15 - проверяем сигнал
10:45:15 - Запускаем действие
10:45:16 - проверяем сигнал
10:45:17 - пришла свечка: 10:45:18
10:45:17 - проверяем сигнал
10:45:17 - Запускаем действие
10:45:18 - проверяем сигнал
10:45:19 - проверяем сигнал
10:45:20 - пришла свечка: 10:45:20
10:45:20 - пришла свечка: 10:45:22
10:45:20 - проверяем сигнал
10:45:20 - Запускаем действие
10:45:21 - проверяем сигнал
10:45:21 - Запускаем действие
10:45:22 - проверяем сигнал
10:45:23 - пришла свечка: 10:45:24
10:45:23 - проверяем сигнал
10:45:23 - Запускаем действие
10:45:24 - проверяем сигнал
10:45:25 - пришла свечка: 10:45:26
10:45:25 - проверяем сигнал
10:45:25 - Запускаем действие
10:45:26 - проверяем сигнал
10:45:27 - проверяем сигнал
10:45:28 - проверяем сигнал
10:45:29 - проверяем сигнал
10:45:30 - пришла свечка: 10:45:28
10:45:30 - проверяем сигнал
10:45:31 - проверяем сигнал
10:45:31 - пришла свечка: 10:45:32
10:45:32 - проверяем сигнал
10:45:33 - проверяем сигнал
10:45:34 - пришла свечка: 10:45:34
10:45:34 - проверяем сигнал
10:45:35 - проверяем сигнал
10:45:35 - пришла свечка: 10:45:36
10:45:36 - проверяем сигнал
10:45:36 - пришла свечка: 10:45:38
10:45:37 - проверяем сигнал
10:45:37 - Запускаем действие
10:45:38 - проверяем сигнал
10:45:38 - пришла свечка: 10:45:40
10:45:39 - проверяем сигнал
10:45:39 - Запускаем действие
10:45:40 - проверяем сигнал
10:45:41 - пришла свечка: 10:45:42
10:45:41 - проверяем сигнал
10:45:41 - Запускаем действие
10:45:42 - проверяем сигнал
10:45:43 - проверяем сигнал
10:45:44 - пришла свечка: 10:45:44
10:45:44 - проверяем сигнал
10:45:45 - проверяем сигнал
10:45:46 - проверяем сигнал
10:45:47 - проверяем сигнал
10:45:47 - пришла свечка: 10:45:46
10:45:48 - проверяем сигнал
10:45:49 - проверяем сигнал
10:45:50 - пришла свечка: 10:45:50
10:45:50 - проверяем сигнал
10:45:50 - пришла свечка: 10:45:52
10:45:51 - проверяем сигнал
10:45:51 - Запускаем действие
10:45:52 - проверяем сигнал
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>