多くのリアルタイムデータを解析し、データが変更されたときにイベントを発生させるオブジェクトがあります。場合によっては、リアルタイムデータの同期が外れることがあります。このデータが検出されると、オブジェクトの新しいインスタンスが作成され、すべてのバックアップが同期されます。新しいオブジェクトのC#イベントが起動しない
更新が確実に行われるよう監視スレッドを実行します。
private async Task DesyncMonitorThread()
{
while (true)
{
if ((DateTime.Now - _lastOrderBookChange) > TimeSpan.FromSeconds(30))
{
Console.WriteLine("No order book activity in 30 seconds. Dispatching desync handler.");
_lastOrderBookChange = DateTime.Now;
OnDesyncDetected(this, new EventArgs());
}
await Task.Delay(1000);
}
}
そしてOnDesyncDetected方法::新しいオブジェクトの動作、および意図したとおりにBook
と_predictor
火災の新しいインスタンスにに加入しているイベントを作成
private void OnDesyncDetected(object sender, EventArgs e)
{
//Unsubscribe
Console.WriteLine("Desync detected. Resyncing order book and prediction engine.");
if (_book != null)
{
_book.OrderBookChanged -= OnBookChange;
_book.DesyncDetected -= OnDesyncDetected;
}
if (_predictor != null)
_predictor.PredictionChanged -= OnNewPrediction;
_book = new RealtimeOrderBook(_productId);
_predictor = new MarketPredictor(_book, Settings.PredictorSettings);
_book.OrderBookChanged += OnBookChange;
_book.DesyncDetected += OnDesyncDetected;
_predictor.PredictionChanged += OnNewPrediction;
}
それはこのようになります。ただし、イベントハンドラOnBookChange
、DesyncDetected
、およびOnNewPrediction
はありません。
これは間違ったオブジェクトを購読することと関係があると仮定したいと思いますが、理由を理解できません。これは別のスレッドで発生している可能性がありますか?あなたがOrderBookChanged、DesyncDetectedを発射できるように、カスタムイベントは、手動でトリガする必要があります
をメソッドを呼び出すことにより、イベントをPredictionChanged問題を解決します。 '_book'オブジェクトで' _book.OrderBookChanged'が呼び出され、 'OnBookChanged'メソッドがそれにサブスクライブされている場合、なぜそれを手動で呼び出すのでしょうか?ここで問題となるのは、古い '_book'オブジェクトを置き換えるために新しいオブジェクトが作成されると、イベントは起動を停止するということです。 – w0ffen
これらのイベントを発生させるコードを表示できますか?あなたはあなたが提供したコードでそれらを購読しました。おそらくあなたの停止発射の問題は、他の場所で見つけることができます。 – Renshaw