C#コンソールアプリケーションのコンテキストで、メッセージを非同期に受信するために使用されるループを作成すると、受信したメッセージごとに次のようなイベントが発生します。
while (true)
{
var message = await ReceiveMessageAsync();
ReceivedMessage(new ReceivedMessageEventArgs(message));
}
ここで、イベントに複数のサブスクライバーがある場合(たとえば、例として3つのサブスクライバーがある場合)、それらすべてが次のような非同期イベントハンドラーを使用します。
async void OnReceivedMessageAsync(object sender, ReceivedMessageEventArgs args)
{
await TreatMessageAsync(args.Message);
}
メッセージオブジェクトはスレッドセーフな方法でコーディングする必要がありますか?異なるイベントハンドラーからのTreatMessageAsyncコードがすべてのサブスクライバーに対して同時に実行される可能性があるため(イベントが発生すると、サブスクライバーの3つの非同期イベントハンドラーが呼び出され、それぞれが異なるスレッドで同時に実行される可能性のある非同期操作を起動すると思いますタスクスケジューラによる)。それとも私は間違っていますか?
ありがとう !