在 C# 控制台应用程序的上下文中,如果我创建一个循环用于异步接收消息,并为每个接收到的消息引发事件,例如:
现在假设我有多个订阅者订阅了事件(为了例子,假设有3个订阅者),他们都使用异步事件处理程序,例如:
while (true)
{
var message = await ReceiveMessageAsync();
ReceivedMessage(new ReceivedMessageEventArgs(message));
}
现在假设我有多个订阅者订阅了事件(为了例子,假设有3个订阅者),他们都使用异步事件处理程序,例如:
async void OnReceivedMessageAsync(object sender, ReceivedMessageEventArgs args)
{
await TreatMessageAsync(args.Message);
}
消息对象是否应该以线程安全的方式编码?我认为是这样的,因为当事件触发时,不同订阅者的TreatMessageAsync代码可能会同时运行(调用三个订阅者的异步事件处理程序,每个处理程序都启动一个异步操作,任务调度程序可能会在不同的线程上并发运行)。或者我错了吗?
谢谢!
TreatMessageAsync
是什么,或者事件是什么。如果您能提供一个简短但完整的程序,那将使生活变得更加简单。 - Jon Skeet