Передача вызовов в поток-исполнитель
От: Аноним  
Дата: 25.06.14 11:46
Оценка:
Здравствуйте.

Есть задача — передавать вызовы некоего интерфейса в поток-исполнитель(работающий например с оборудование) и возврат результата исполнения.

Сейчас у меня это сделано через класс вроде:

internal class Request
    {
        public readonly Code Code;
        public readonly object Payload;
        public ResponseCode Response;
        public object ResponsePayload;
        private readonly ManualResetEventSlim _completed;

        public Request(Code code, object payload)
        {
            Code = code;
            Payload = payload;
            _completed = new ManualResetEventSlim(false);
        }

        public void SetCompleted()
        {
            _completed.Set();
        }

        public void WaitForCompletion(CancellationToken ct)
        {
            _completed.Wait(ct);
        }
    }

internal enum ResponseCode
    {
        Ok,
        Fail
    }
internal enum Code
    {
        Sale,
        PrintCheck
    }


И очередь запросов:

private readonly BlockingCollection<Request> _requests = new BlockingCollection<Request>();


На каждый вызов снаружи есть метод с некоей сигнатурой, все параметры упаковываются в соответствующий типу запроса класс, это засовывается в Payload, коду запроса присваивается значение и т.д. После чего поток получает уведомление, распаковывает параметры и вызывает уже внутренний метод, который делает работу и возвращает результат, после чего все отдается вызывающему.

Проблема в том, что выглядит все это очень громоздко. На каждый вызов сделать код вызова, класс для запаковки, добавить ветвление в switch потока-исполнителя.

А как это бы делали вы? Какие есть фреймворки, библиотеки, подходы работы с такими вещами?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.