Выполнение RegisterOrder в синхронном режиме
trader.IsAsyncMode = false;
Обработчик trader.NewStopOrders:
Код
private void trader_NewStopOrders(IEnumerable<Order> stopOrders)
{
...
AddLog("New stop orders", true);
AddLog("thread id: " + Thread.CurrentThread.ManagedThreadId.ToString() + " thread name: " + Thread.CurrentThread.Name, true);
...
}
При выполнении кода:
Код
private void button1_Click(object sender, EventArgs e)
{
Order order = CreateStopLimit(1, 151500, 151500, workSecurity, OrderDirections.Sell);
AddLog("thread id: " + Thread.CurrentThread.ManagedThreadId.ToString() + " thread name: " + Thread.CurrentThread.Name, true);
AddLog("do: " + order.Id.ToString(), true);
try
{
trader.RegisterOrder(order);
}
catch
{
}
AddLog("posle: " + order.Id.ToString(), true);
}
Лог:
22:40:44:62 thread id: 10 thread name:
22:40:44:62 do: 0
22:40:44:320 New stop orders
22:40:44:322 thread id: 10 thread name:
22:40:44:327 posle: 1395021
Т.е. в trader_NewStopOrders мы попадаем сразу из trader.RegisterOrder(order);
При выполеннии следующего куска кода из метода, вызываемого из обработчика trader.NewMyTrades
Код
AddLog("thread id: " + Thread.CurrentThread.ManagedThreadId.ToString() + " thread name: " + Thread.CurrentThread.Name, true);
AddLog("do: " + order.Id.ToString(), true);
try
{
trader.RegisterOrder(order);
}
catch (Exception e)
{
AddLog("Ошибка: " + e.Message, true);
}
AddLog("posle: " + order.Id.ToString(), true);
Имеем лог:
22:39:09:809 thread id: 23 thread name: EventDispatcher thread #мои сделки
22:39:09:809 do: 0
22:39:10:193 posle: 1395020
22:39:10:193 New stop orders
22:39:10:193 thread id: 23 thread name: EventDispatcher thread #мои сделки
Т.е. в trader_NewStopOrders мы попадаем уже после окончания метода.
Хотелось бы узнать в каких случаях мы сразу попадем в trader_NewStopOrders, а в каких нет, всегда ли они будут выполняться в том же потоке что и trader.RegisterOrder(order); и т.д.