Я думаю, что Rx - хороший выбор, но я думаю, что я мог что-то упустить в ваших требованиях.Из того, что я понимаю, Rx предлагает очень простое решение.
Если у вас уже есть список сообщений, вы можете отправить их реактивно следующим образом:
messages
.ToObservable()
.ObserveOn(Scheduler.ThreadPool)
.Subscribe(m =>
{
Send(m);
});
Это переводит вызовы на Send
в пул потоков, и, благодаря встроенному поведению наблюдаемых, каждый вызов Send
ожидает завершения предыдущего вызова.
Поскольку все это происходит в другом потоке, ваш код не является-блокирование.
Дополнительным преимуществом Rx является то, что вам не нужно менять поведение или сигнатуру вашего Send
метода, чтобы эта работа работала.
Просто, да?
Я проверил это, и оно работало нормально, учитывая мое понимание вашей проблемы.Это все, что тебе нужно, или я что-то пропустил?