Создание всех методов из класса для запуска в одном потоке в c# - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу создать синглтон, который имеет свой собственный поток и выполняет каждый метод (допустим, что это база данных, и каждое действие добавления / изменения должно вызываться из того же потока), этот поток может быть создан внутри конструктора, а также Я хочу, чтобы каждый метод из этого синглтона выполнялся в указанном потоке c.

Из того, что я понимаю, новая System.Threading.Thread.Thread () дает мне возможность запустить поток, но после запуска я не могу свободно запросить следующую работу. Как поставить новую работу в очередь? Это должно работать как myThread.Queue (() => doWork ()); но я не вижу API так.

1 Ответ

3 голосов
/ 30 апреля 2020

Ниже упрощенный код показывает, как вы можете это сделать. TryTake будет блокироваться на неопределенный срок (или вызывается unitl collection.CompleteAdding(), хотя существуют перегрузки, которые принимают значение тайм-аута.

        var collection = new BlockingCollection<Action>();

        new Thread(() =>
        {
            while (collection.TryTake(out Action a, -1))
            {
                     a.Invoke();
            }
        }

        }).Start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...