Loading...
Loading...
Build or review distributed .NET applications with Orleans grains, silos, persistence, streaming, reminders, placement, transactions, serialization, event sourcing, testing, and cloud-native hosting.
npx skill4agent add managedcode/dotnet-skills dotnet-orleans.NETMicrosoft.Orleans.*GrainIGrainWith*UseOrleansUseOrleansClientIGrainFactoryJournaledGrainITransactionalStateInProcessTestClusterAspire.Hosting.TestingWebApplicationFactory[StatelessWorker]IGrainWithGuidKeyIGrainWithIntegerKeyIGrainWithStringKeyIGrainWithGuidCompoundKeyIGrainWithIntegerCompoundKeyTaskTask<T>ValueTask<T>IAsyncEnumerable<T>.Result.Wait()Task.WhenAll[ResponseTimeout("00:00:05")]IPersistentState<TState>[PersistentState("name", "provider")]JournaledGrain<TState, TEvent>ITransactionalState<TState>Grain<TState>[StatelessWorker][ImplicitStreamSubscription][ImplicitChannelSubscription]RegisterGrainTimerIRemindableIGrainObserverObserverManager<T>[GenerateSerializer][Id(N)][Alias("name")][Immutable]IConverter<TOriginal, TSurrogate>[Reentrant][AlwaysInterleave][ReadOnly]RequestContext.AllowCallChainReentrancy()CancellationTokenUseOrleansUseOrleansClient.AsClient()TokenCredentialDefaultAzureCredentialResourceOptimizedPlacementRandomPlacementPreferLocalPlacementHashBasedPlacementActivationCountBasedPlacementSiloRoleBasedPlacementIPlacementDirectorPlacementStrategyPlacementAttributeMicrosoft.Extensions.LoggingSystem.Diagnostics.Metrics"Microsoft.Orleans"AddOtlpExporterAddMeter("Microsoft.Orleans")AddActivityPropagation()"Microsoft.Orleans.Runtime""Microsoft.Orleans.Application"InProcessTestClusterWebApplicationFactory<TEntryPoint>IGrainFactoryflowchart LR
A["Distributed requirement"] --> B{"Many independent<br/>interactive entities?"}
B -->|No| C["Plain service / worker / ASP.NET Core"]
B -->|Yes| D["Model one grain per business identity"]
D --> E{"State pattern?"}
E -->|"Persistent"| F["IPersistentState<T>"]
E -->|"Event-sourced"| F2["JournaledGrain<S,E>"]
E -->|"Transactional"| F3["ITransactionalState<T>"]
E -->|"In-memory only"| G["Activation state"]
D --> H{"Communication?"}
H -->|"Pub/sub"| I["Orleans streams"]
H -->|"Broadcast"| I2["Broadcast channels"]
H -->|"Push to client"| I3["Observers"]
H -->|"Request/response"| I4["Direct grain calls"]
D --> J{"Periodic work?"}
J -->|"Activation-local"| K["RegisterGrainTimer"]
J -->|"Durable wakeups"| L["Reminders"]
D --> M{"Client topology?"}
M -->|"Separate process"| N["UseOrleansClient / .AsClient()"]
M -->|"Same process"| O["Co-hosted silo+client"]
F & F2 & F3 & G & I & I2 & I3 & I4 & K & L & N & O --> P["Serialization → Placement → Observability → Testing → Deploy"].NET[GenerateSerializer][Id][Alias][GenerateSerializer][Id(N)]UseOrleans()UseOrleansClient()[Reentrant][AlwaysInterleave]AllowCallChainReentrancy[Reentrant]PerformReadPerformUpdateInProcessTestClusterWebApplicationFactory