在 C# 控制台应用程序的上下文中,如果我创建一个用于异步接收消息的循环,它会为收到的每条消息引发一个事件,例如:
while (true)
{
var message = await ReceiveMessageAsync();
ReceivedMessage(new ReceivedMessageEventArgs(message));
}
现在,如果我有多个事件订阅者(为了示例,假设为 3 个订阅者),所有订阅者都使用异步事件处理程序,例如:
async void OnReceivedMessageAsync(object sender, ReceivedMessageEventArgs args)
{
await TreatMessageAsync(args.Message);
}
消息对象是否应该以线程安全的方式编码?我认为是这样,因为来自不同事件处理程序的 TreatMessageAsync 代码可能会为所有订阅者同时运行(当引发事件时,订阅者的三个异步事件处理程序被调用,每个都启动一个异步操作,该操作可能在不同线程上同时运行由任务调度程序)。还是我错了?
谢谢 !