Как создать собственный SynchronizationContext, чтобы все продолжения могли обрабатываться моим собственным однопоточнымC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как создать собственный SynchronizationContext, чтобы все продолжения могли обрабатываться моим собственным однопоточным

Сообщение Anonymous »

Предположим, вы пишете собственную однопоточную библиотеку графического интерфейса (или что-нибудь с циклом событий). Насколько я понимаю, если я использую async/await или просто обычные продолжения TPL, все они будут запланированы на TaskScheduler.Current (или на SynchronizationContext.Current).

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

Код: Выделить всё

// All continuation calls should be put onto this queue
Queue events;

// The main thread calls the `Update` method continuously on each "frame"
void Update() {
// All accumulated events are processed in order and the queue is cleared
foreach (var event : events) Process(event);

events.Clear();
}
Теперь, поскольку мое предположение верно и TPL использует SynchronizationContext.Current, любой код в приложении должен иметь возможность делать что-то вроде этого:

Код: Выделить всё

async void Foo() {
someLabel.Text = "Processing";

await BackgroundTask();

// This has to execute on the main thread
someLabel.Text = "Done";
}
Это подводит меня к вопросу. Как реализовать собственный SynchronizationContext, который позволит мне обрабатывать продолжения в моем собственном потоке? Это вообще правильный подход?

Подробнее здесь: https://stackoverflow.com/questions/392 ... ons-can-be
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как получить задачу, использующую SynchronizationContext? И как вообще используется SynchronizationContext?
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Где я могу запустить приложение Expo с собственным собственным кодом?
    Гость » » в форуме IOS
    0 Ответы
    41 Просмотры
    Последнее сообщение Гость
  • Страница ASP.NET перестает обрабатываться
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Политики авторизации и домена в DDD: Должны ли аутентификация/авторизация обрабатываться на уровне приложения?
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Ограничить запросы API только моим собственным мобильным приложением
    Anonymous » » в форуме Android
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»