When an agent sends a message of a type to which it also listens:
[TopicSubscription("default")]
public class MyAgent(
IAgentWorker worker,
[FromKeyedServices("EventTypes")] EventTypes typeRegistry
) :
Agent(worker, typeRegistry),
IHandle<Message>
{
async Task SomeInternalFunctionAsync()
{
Message m;
// ...
await this.PublishMessageAsync(m);
}
public async Task Handle(Message message)
{
// will receive messages sent by SomeInternalFunctionAsync()
}
}
Tracked by #4998
Unlike the single_threaded_runtime, the InProcess (local: true) runtime for .NET is multi-threaded, so messages will process in arbitrary order across agents. This means that an agent may process messages sent after the termination request has been made unless checking for termination using the IHostApplicationLifecycle service.
Agents need to request termination explicitly, as there is no meaningful 'idle' state.
See (linkto: defining-message-types.md) for instructions on defining messages
Tracked by #4695