Я не уверен, правильно ли я понимаю ваш вопрос, но почему вы не можете просто выполнить ту логику, которая у вас есть, на другом Thread
, или если она достаточно мала, нажмите на ThreadPool
?
Вот пример:
ThreadPool.QueueUserWorkItem(o=>
{
_paidSubj.OnNext(this); // Raise PAID event
});
Я запутался в типе данных на Subject
, я никогда не видел этот класс в C # ... это то, что вы создали?OnNext
- это событие, которое вызывается, или это просто метод?Если OnNext
является событием, то вы можете использовать BeginInvoke
для его асинхронного вызова:
_paidSubj.OnNext.BeginInvoke(this, null, null);
Обновление:
Важная вещь, которая произойдет, еслиВы реализуете этот тип асинхронного поведения: если вы уведомите IObserver
, передав Order
, у вас могут возникнуть некоторые несоответствия при попытке прочитать данные в наблюдателе (а именно, в буфере заказа), в то время как Порядок продолжает изменятьсябуфер в его потоке Read
.Таким образом, есть как минимум два способа решить эту проблему:
- Ограничить доступ к памяти, которая будет изменена с помощью блокировок.
- Только уведомлять наблюдателя с соответствующей информацией, которую вы хотитеэто увидеть:
а.Передавая информацию как значение (не как ссылку).
b.Создавая неизменную структуру, которая передает информацию.
PS Откуда вы взяли Subject
?Subject
должен быть OrderObserver
?