У нас есть метод, который из-за многопоточности в клиентском приложении требует использования SynchronizationContext.
Есть фрагмент кода, который написал один из моих коллег, который мне не «кажется» правильным, и профилировщик производительности говорит мне, что в этом фрагменте кода используется большая часть обработки.
void transportHelper_SubscriptionMessageReceived(object sender, SubscriptionMessageEventArgs e)
{
if (SynchronizationContext.Current != synchronizationContext)
{
synchronizationContext.Post(delegate
{
transportHelper_SubscriptionMessageReceived(sender, e);
}, null);
return;
}
[code removed....]
}
Мне это просто не подходит, поскольку мы в основном отправляем один и тот же запрос в очередь событий потока графического интерфейса ... однако я также не вижу никаких проблем, кроме производительности этой области кода.
Этот метод является обработчиком событий, прикрепленным к событию, вызванному нашим помощником уровня обмена сообщениями среднего уровня (transportHelper), и он существует в службе, которая обрабатывает запросы из графического интерфейса.
Похоже ли это на приемлемый способ убедиться, что мы не получаем межпоточных ошибок? Если нет, есть ли лучшее решение?
Спасибо