Tutorials C# Programming Tutorial
Real-Time Event Examples — Complete Guide
Real-Time Event Examples — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of C# Programming Tutorial on Toolliyo Academy.
On this page
C# Programming Tutorial · Lesson 105 of 240
Pub-Sub Architecture
Beginner ✓ → Intermediate → Advanced → Professional
Intermediate · 2 — Building skills · ~18 min read · Module 8: Delegates, Events & Lambda
1. Introduction
You know C# basics now. Here we apply Pub-Sub Architecture in real programs — console apps, services, and small projects. Still clear language, more depth. Pub-Sub Architecture is a core part of C# and .NET development. In plain terms: it helps you organize code so multiple developers can work on the same system for years. You will see Pub-Sub Architecture in console apps, Web APIs, background workers, and unit tests. Skipping it makes later modules (OOP, async, collections) much harder.
Delegates and events feel abstract until you wire a real OrderPlaced notification.
2. Real-world story
At Zoho multi-tenant SaaS backend, engineers use Pub-Sub Architecture to organize code so multiple developers can work on the same system for years. This code shows the same pattern you will see in code reviews — simplified for learning, but structurally similar to production services deployed to Azure or on-prem IIS/Kestrel.
3. Problem without this concept
If you ignore Pub-Sub Architecture, this is what teams struggle with:
- Duplicate logic and unclear structure
- Harder onboarding for new developers
- More bugs found only in production
4. Definition
Pub-Sub Architecture is a core part of C# and .NET development. In plain terms: it helps you organize code so multiple developers can work on the same system for years.
5. Why do we need it?
You will see Pub-Sub Architecture in console apps, Web APIs, background workers, and unit tests. Skipping it makes later modules (OOP, async, collections) much harder. For events, callbacks, and LINQ — common in UI and backend services.
6. Where is it used?
- OrderPlaced notifications
- UI event handlers (WPF/MAUI)
- LINQ pipelines
- OrderPlaced events notify email, SMS, and analytics services.
- Lambda expressions filter LINQ queries on product catalogs.
7. How it works
- Read the example top to bottom.
- Each line connects to Pub-Sub Architecture.
- Run it with dotnet run, then change one value and predict the output before you save.
8. Syntax
Core syntax pattern for Pub-Sub Architecture:
public record OrderPlaced(int OrderId, decimal Total);
public class OrderNotifier
{
public event Action<OrderPlaced>? OrderPlaced;
public void PlaceOrder(int id, decimal total)
{
OrderPlaced?.Invoke(new OrderPlaced(id, total));
}
| Syntax | Meaning |
|---|---|
public record OrderPlaced(int OrderId, decimal Total); | Defines a type — blueprint for objects or contracts. |
public class OrderNotifier | Defines a type — blueprint for objects or contracts. |
{ | Part of the Pub-Sub Architecture example — read with surrounding lines. |
public event Action<OrderPlaced>? OrderPlaced; | Part of the Pub-Sub Architecture example — read with surrounding lines. |
public void PlaceOrder(int id, decimal total) | Method declaration — reusable block of logic. |
{ | Part of the Pub-Sub Architecture example — read with surrounding lines. |
9. Beginner example
Copy into a console project (dotnet new console → dotnet run).
public record OrderPlaced(int OrderId, decimal Total);
public class OrderNotifier
{
public event Action<OrderPlaced>? OrderPlaced;
public void PlaceOrder(int id, decimal total)
{
OrderPlaced?.Invoke(new OrderPlaced(id, total));
}
}
var notifier = new OrderNotifier();
notifier.OrderPlaced += o => Console.WriteLine($"Notify: Order {o.OrderId} ₹{o.Total}");
notifier.PlaceOrder(9001, 1499m);
Line-by-line
| Code | What it means |
|---|---|
public record OrderPlaced(int OrderId, decimal Total); | Defines a type — blueprint for objects or contracts. |
public class OrderNotifier | Defines a type — blueprint for objects or contracts. |
{ | Part of the Pub-Sub Architecture example — read with surrounding lines. |
public event Action<OrderPlaced>? OrderPlaced; | Part of the Pub-Sub Architecture example — read with surrounding lines. |
public void PlaceOrder(int id, decimal total) | Method declaration — reusable block of logic. |
{ | Part of the Pub-Sub Architecture example — read with surrounding lines. |
OrderPlaced?.Invoke(new OrderPlaced(id, total)); | Part of the Pub-Sub Architecture example — read with surrounding lines. |
} | Closes a block started earlier. |
} | Closes a block started earlier. |
var notifier = new OrderNotifier(); | Part of the Pub-Sub Architecture example — read with surrounding lines. |
notifier.OrderPlaced += o => Console.WriteLine($"Notify: Order {o.OrderId} ₹{o.Total}"); | Prints output to the terminal — useful while learning. |
notifier.PlaceOrder(9001, 1499m); | Part of the Pub-Sub Architecture example — read with surrounding lines. |
10. Real project example
At Zoho multi-tenant SaaS backend, engineers use Pub-Sub Architecture to organize code so multiple developers can work on the same system for years. This code shows the same pattern you will see in code reviews — simplified for learning, but structurally similar to production services deployed to Azure or on-prem IIS/Kestrel.
Production-style C#
// Zoho multi-tenant SaaS backend
// Uses Pub-Sub Architecture to organize code so multiple developers can work on the same system for years
public record OrderPlaced(int OrderId, decimal Total);
public class OrderNotifier
{
public event Action<OrderPlaced>? OrderPlaced;
public void PlaceOrder(int id, decimal total)
{
OrderPlaced?.Invoke(new OrderPlaced(id, total));
}
}
var notifier = new OrderNotifier();
notifier.OrderPlaced += o => Console.WriteLine($"Notify: Order {o.OrderId} ₹{o.Total}");
notifier.PlaceOrder(9001, 1499m);
Why teams use this: Teams that master Pub-Sub Architecture ship fewer production incidents and pass code review faster on Zoho-scale systems.
11. Visual understanding
Input (user, file, API)
│
▼
Pub-Sub Architecture logic in C#
│
▼
Output (console, HTTP response, file)
12. Internal working
- Roslyn compiler checks syntax and types before your program runs.
- CLR executes IL and provides services (GC, exceptions, threading).
- For this lesson, focus on behavior first — runtime details matter more as apps grow.
13. Advantages
- Readable code that new team members can follow
- Compiler catches many mistakes before deploy
- Huge .NET job market in India and worldwide
14. Disadvantages
- Takes time to learn if you skip fundamentals
- Overusing advanced features too early adds complexity
15. Best practices
- Use meaningful names — `transferAmount` not `x`
- Run `dotnet format` or EditorConfig for consistent style
- Commit small examples to Git from lesson one
16. Common mistakes
- Copy-pasting without typing — your fingers need to remember Pub-Sub Architecture syntax.
- Skipping error messages when the compiler fails — the red text usually tells you exactly what to fix.
17. Interview questions
What is Pub-Sub Architecture in simple words?
Pub-Sub Architecture is explained above — focus on the "what" paragraph and the lesson example.
Do I need Pub-Sub Architecture for ASP.NET Core jobs?
Yes for most backend roles — this course builds toward Web APIs and services using the same C# fundamentals.
Explain Pub-Sub Architecture to a non-technical teammate in 30 seconds.
Focus on the problem it solves — use a bank transfer or shopping cart analogy, not jargon.
Junior interview: give one code example using Pub-Sub Architecture.
Use the beginner example from this lesson — be able to write it on a whiteboard without looking.
What goes wrong if you misuse Pub-Sub Architecture?
Mention one mistake from the Common mistakes section and how you would fix it in a code review.
Do this on your computer
- Open Visual Studio or run dotnet new console -n LearnPubSubArchit.
- Paste the lesson example into Program.cs (or a new file).
- Run the program and confirm the output matches your expectation.
- Read the real-world section and name which part of a banking or e-commerce API would use this topic.
- Change one line (amount, loop bound, or method name) and run again.
- Read the real-world section and identify which layer (API, service, domain) uses this topic.
- Run dotnet build and dotnet run locally — confirm output.
- Change one value and predict the result before saving.
Experiments — try changing this
- Change a number or string in the example and run again — predict output first.
- Introduce a deliberate error (remove a semicolon) and read the compiler message.
18. Summary
- Pub-Sub Architecture is used to organize code so multiple developers can work on the same system for years.
- Practice by editing the example yourself.
- Move to the next lesson when you can explain this topic in your own words.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!