В контексте консольного приложения С#, если я создаю цикл, используемый для асинхронного получения сообщения, который вызывает событие для каждого полученного сообщения, например:
while (true)
{
var message = await ReceiveMessageAsync();
ReceivedMessage(new ReceivedMessageEventArgs(message));
}
Теперь, если у меня есть несколько подписчиков на событие (скажем, 3 подписчика для примера), все они используют асинхронный обработчик событий, например:
async void OnReceivedMessageAsync(object sender, ReceivedMessageEventArgs args)
{
await TreatMessageAsync(args.Message);
}
Должен ли объект сообщения быть закодирован потокобезопасным способом? Я так думаю, поскольку код TreatMessageAsync из разных обработчиков событий может выполняться одновременно для всех подписчиков (когда возникает событие, вызываются три обработчика асинхронных событий подписчиков, каждый из которых запускает асинхронную операцию, которая потенциально может выполняться одновременно в разных потоках). планировщиком задач). Или я ошибаюсь?
Спасибо !
TreatMessageAsyncили что это за событие. Если бы вы могли дать короткую, но полную программу, это сделало бы жизнь намного проще. - person Jon Skeet   schedule 30.11.2012