New to site?


Lost password? (X)

Already have an account?


(X)

Presents

#CSHARPCON20

The C# Corner Annual Conference 2020 is a three-day annual event for software professionals and developers.

3
DAYS
72
SPEAKERS
65
SESSIONS

Magnus Mårtensson
Microsoft Regional Director, Azure MVP, CEO Loftysoft

Avirag Jain
Director & CTO R Systems

Mahesh Chand
Founder C# Corner, CEO Mindcracker

Chris Gali
CEO & Co-Founder Graphite

Subinder Khurana
Chief Architect StoryProcess, Founder NASSCOM DeepTech Club

Bryan Rishforth
Investor, Chairman Graphite

Bryn Everson
Director Biz Dev Graphite

Raj Tiwari
Digital Transformation Leader, Futurist and Visionary

Joseph Guadagno
Microsoft MVP, Lead Quicken Loans

Nikita Sachdev
Entrepreneur, Blockchain Enthusiast & Advisor, Social Media Influencer

Doug Wagner
COO & Founder Adapt Technical Group

Ritesh Modi
Architect, Senior Evangelist, Cloud Architect

Crystal Wenrick
Director Communications Mindcracker

Allen O’Neill
Microsoft MVP, Consulting Engineer/Architect

Praveen Kumar
CEO MCN Solutions

Chris Love
Founder Love2Dev, Microsoft MVP, Author

Sanjay Vyas
Microsoft Regional Director, Microsoft MVP, Founder & CEO SkillLabs Technologies

Veena Sarda
Deep Learning Consultant, Author

Sekhar Srinivasan
C# Corner MVP, Microsoft Certified Trainer, Pluralsight Author

Lalit Bansal
Founder & CEO - EIY SYS

Navdeep Garg
CEO Revinfotech

Prakash Tripathi
Tech Manager/Leader, Microsoft MVP, Blogger

Bhavna Jain
Breakthrough Consultant

Naveen Sharma
Enterprise Architect, Leadership Coach, Author

Vidya Vrat Agarwal
Principal Architect, Microsoft MVP, Author

Sheetal Agarwal
Founder Clownselors, Medical Clown, Trainer

Abhishek Kant
Founder GTM Catalyst

Vishnu Saran
Founder & CEO VoiceQube

Sandeep Soni
Founder & CEO Deccansoft, Microsoft Certified Trainer

Parveen Malik
AVP InfoSec & Vulnerability Management, Information Security Expert

Nitin Pandit
Microsoft MVP, Developer Evangelist, Author

Niloshima Srivastava
C# Corner MVP, Tech Architect, Trainer, Blogger

Bala Chirtsabesan
Senior Software Engineer at Microsoft, Author

Manoj Mittal
Sr. Technical Architect, C# Corner MVP, Author

Chandni Di
Co-Founder Voice of Slum

Vithal Wadje
Technical Lead, Microsoft MVP, Author

Shivam Ahuja
Founder SkillCircle, Business Mentor

Chervine Bhiwoo
Solution Architect, Microsoft MVP, Author

Saurabh Jain
Vice President Paytm, Founder Fun2Do Labs, Author

Vinay Solanki
Head IoT at Lenovo, Founder IoT-NCR

Anshu kumari
Founder Blockchainkids, Inventor, Trainer

Amit Singal
CEO Startup Buddy

Dev Pratap
Co-Founder & CEO Voice of Slum

Amey Vartak
Technology Consultant, Full Stack Developer, C# Corner MVP, Author

Viswanatha Swamy
Principal Software Engineer, C# Corner MVP, Author

Sanket Verma
Research Engineer @ Ballistics (Forensics) and Chair, PyData Delhi

Sourabh Somani
Lead Developer, Microsoft MVP, Author

Abhishek Mishra
Software Architect, C# Corner MVP, Author

Siddharth Vaghasia
Technical Consultant, C# Corner MVP, Blogger

Bassam Alugili
Senior Software Specialist, Database Expert

S Ravi Kumar
Solution Architect, C# Corner MVP, Author

Sundaram Subramanian
Full Stack Developer, C# Corner MVP, Speaker

Deepesh Somani
Solution Architect, Microsoft MVP, Author

Debasis Saha
Technical Project Manager, C# Corner MVP, Blogger, Author

Vipul Jain
Software Architect, C# Corner MVP, Author

Akshay Patel
Technical Architect, Microsoft Certified Trainer, C# Corner MVP, Author

Stephen Simon
RPA Developer, Evangelist, Author

Vivek Sharma
Founder Kingster636, AR/VR Specialist

Jeetendra Gund
Technical Lead, C# Corner MVP, Author

Sujal Beniwal
AI Enthusiast, Student

M Viknaraj
Microsoft MVP, Azure Architect, Author

Prasham Sabadra
Software Architect, C# Corner MVP, Trainer, Author

Aakash Maurya
Senior Developer, C# Corner MVP, Speaker

Ankit Sharma
Senior Software Engineer, C# Corner MVP, Author

Mangesh Gaherwar
Team Lead, C# Corner MVP, Author

Viral Jain
Technical Consultant, C# Corner MVP, Author

Bhasker Das
Solution Architect, Evangelist

Manish Dwivedi
Associate Project Manager

Ck Nitin
Programmer, Author

Rohit Gupta
Technical Trainer, Author

Manish Tewatia
Full-stack Marketer, UX Designer

Bhavya Gaur
Technical Illustrator

Rohit Tomar
SEO/SMO Expert

Web Track

Cloud & Data Track

Dev Track

8am-9am

Registration & Breakfast

9am-10am

Future of Desktop Apps with JS (ElectronJs)

Nitin Pandit

Building Serverless Microservices Using Microsoft Azure

Vithal Wadje

Innovating RPA: A Robot for Every Person

Stephen Simon

10am-11am

Managing Cloud Storage Accounts using Logic Apps

Viknaraj Manogararajah

Data visualization using Python

Sekhar Srinivasan

Going Cross platform with AR Foundation

Vivek Sharma

11am-12pm

Keynote

12pm-1pm

Managing your Azure dependencies in ASP.NET Core apps using VS

Bala Chirtsabesan

Securing Applications on Intelligent Azure

Abhishek Mishra

Getting started with Blazor the Framework of Future

S Ravi Kumar

1pm-2pm

Lunch

2pm-2:45pm

Build Progressive Web Apps using Angular 9

Debasis Saha

Build and deploy to any platform using Azure DevOps

Chervine Bhiwoo

Deep Dive in Azure Service Bus

Akshay Patel

2:45pm-3:45pm

Build a Native Mobile Application using React Native and JavaScript

Joseph Guadagno

Making sense of Web Job, Web Job SDK and Functions in Azure

Prakash Tripathi

CloudFront Distribution in AWS

Viral Jain

3:45pm-4pm

Tea Break

4pm-4:30pm

Introduction to PowerBI

Aakash Maurya

Build Advanced SPFx solutions with React and Graph API

Siddharth Vaghasia

Build Business Intelligence Analyst (BIA) Skills

Sundaram Subramanian

4:30pm-5pm

Deep dive of Power Platform – AI BUILDER

Prasham Sabadra

Panel 1

What's new in SharePoint development

Vipul Jain

5pm-5:30pm

Build a SSO (Single Sign On) based Native JavaScript application with Microsoft Identity within 10 minutes

Manoj Mittal

Panel 2

Applications and working of AI

Veena Sarda

5:30pm-6pm

Deploying serverless API's with .Net core 3.0 on AWS & Azure

Amey Vartak

Panel 3

Blockchain with .NET Core (Ark)

Anshu Kumari

6pm-6:30pm

Closing Note & Prize Distribution

Dev Track

Cloud Track

Architecture Track

Emerging Tech Track

8am-9am

Registration & Breakfast

9am-10am

Creating Full-Stack Web Apps Using Server-Side Blazor

Ankit Sharma

Real time face recognition with MS Cognitive Services

Niloshima Srivastava

Building Scalable APIs with GraphQL

Jeetendra Gund

Future of development with AI and Blockchain

Navdeep Garg

10am-11am

Debugging Tips and Tricks with Visual Studio 2019

Joseph Guadagno

Azure Containers

Abhishek Kant

Enterprise Architecture

Naveen Sharma

Bot Framework - learn it fast and look like a boss!

Allen O’Neill

11am-12:30pm

Keynote

12:30pm-1:30pm

.Net Core & C# 8 Performance

David McCarter

Working with Azure kubernetes services

Ritesh Modi

Becoming an Architect

Vidyavrat Agarwal

Why Techies Need to Learn Product Management

Saurabh Jain

1:30pm-2:30pm

Lunch

2:30pm-3:30pm

Build a rules engine in .Net Core

Sanjay Vyas

Building CI and CD Pipeline using Azure DevOps

Sandeep Soni

Entity Framework Core - Tips and Tricks, Performance Optimization, and Tuning

Bassam Alugili

Hacking your way into Data Science

Sanket Verma

3:30-4:15pm

Speed up your .Net Core Website

Sourabh Somani

Azure

Magnus Mårtensson

Demystifying Open Distro for Elasticsearch

Suman Debnath

Future of Data

Shivam Ahuja

4:15pm-4:30pm

Tea Break

4:30pm-5:15pm

gRPC with C# and .Net Core

Mangesh Gaherwar

Panel 1

Essentials of Cloud security

Parveen Malik

Power platform and Dynamics 365

Deepesh Somani

5:15pm-6pm

Microservices - the gRPC Way

Viswanatha Swamy

Panel 2

Reserved

Reserved

6pm-6:30pm

Closing Note & Prize Distribution

Building Event-Driven Systems with Azure Cosmos DB Change Feed in .NET

Azure Cosmos DB has become a familiar workhorse for Australian teams building globally distributed applications, and the change feed feature turns the service into more than just a low-latency document store. When paired with the .NET SDK, the change feed offers a managed, scalable way to react to data modifications without writing complex polling logic or maintaining side tables. For organisations running workloads in Sydney, Melbourne or Brisbane data centres, the pattern helps bridge operational data with downstream event-driven pipelines while keeping read traffic close to home and latency predictable for end users across the country.

This article walks through the design and implementation of a change feed processor, the configuration choices that matter in production, and a few patterns that appear repeatedly in real systems across finance, retail and government projects. If you are attending a developer event such as C# Corner Annual Conference, expect to see this technology featured in several sessions on cloud-native development, and the examples below should give you a useful starting point regardless of the event track you choose to follow on the day.

Understanding the Change Feed Pattern

The change feed is a persistent, append-only log of inserts and updates that occur against a Cosmos DB container. The feed is exposed in chunks, ordered by the partition key range, and clients iterate through it using a continuation model. There is no explicit enablement step, no schema, and no cost beyond the request units already consumed by the writes that produced it. Reads from the change feed count as normal point or query operations against the configured consistency level, which is worth keeping in mind when modelling throughput budgets for shared containers that already serve interactive traffic.

For Australian developers, the most common misconception is that the feed behaves like a message queue. It does not. Items remain in the feed for as long as the consumer keeps the associated lease, and there is no built-in replay window, dead-letter queue or retention policy beyond what your code and lease container define. Treat it as a stateful, partitioned stream of mutations rather than a competing-consumer broker, and design any replay tooling you need to keep around for incidents or migrations.

Because the feed is partitioned, the processor library in the .NET SDK parallelises work across partition key ranges. Each range is leased to one host at a time, and the host persists its progress in a separate leases container. This design is what allows teams to add or remove worker instances without re-engineering consumer logic, even when those workers live in different Azure regions serving a Sydney-based retail platform or a Melbourne banking workload. The same machinery also underpins most replication and audit pipelines that Australian Cyber Security Centre accredited organisations use to keep secondary stores in sync, including the read-only replicas that several federal agencies maintain for reporting purposes.

Setting Up the .NET SDK and Leases

A typical project starts by referencing the Microsoft.Azure.Cosmos NuGet package and creating a CosmosClient instance configured for the workload. The client should be registered as a singleton, since it pools connections and manages internal transport state. Connection policy options such as ApplicationPreferredRegions let you set Australia East as the primary region and Australia Southeast as a failover, which aligns with the Australian Prudential Regulation Authority expectations for resilience in financial services workloads. Teams that operate outside the finance sector still tend to follow the same region-pinning pattern because it keeps the request path short and predictable for customers connecting from Australian ISPs.

The leases container is where most configuration mistakes happen. It should live in the same Cosmos DB account so that writes and leases share the same partition topology, but it is normally placed in a separate database for clarity. The container must be created with a default TTL that matches your recovery time objective, because the processor relies on lease documents expiring to recover from a worker crash. Setting TTL too low causes unnecessary handovers in chatty workloads; setting it too high delays recovery when a process dies in production. A 60-second default is a sensible starting point for most consumer-grade services, with adjustments driven by observed health rather than initial guesswork, and a small number of teams in Adelaide and Perth have reported better outcomes with 90 seconds on a slower network path.

The processor itself is constructed with GetChangeFeedProcessorBuilder<T>, where T is the type that the delegate will receive. The builder lets you configure the instance name, which is how multiple worker hosts cooperate; the poll interval, which defaults to five seconds and controls how quickly the processor detects new changes; and a start-from-beginning flag, which is useful for backfills when a downstream system has just been created. Australian teams regularly use this flag when seeding an analytics warehouse for the first time after a major migration, particularly for retail and loyalty platforms that are rebuilt every few years to support new marketing campaigns.

Implementing the Change Feed Processor

The handler delegate is the heart of the system. It receives a ChangeFeedProcessorContext and a stream of changes, and it is responsible for both deserialisation and any business logic that should run in response. A common pattern is to keep the handler lean, perform idempotent work, and forward a typed event to a downstream bus such as Azure Service Bus or Event Grid. Heavy processing should be offloaded, because the lease stays held until the delegate returns, and any latency there will block every other change in the same partition key range from being delivered.

var processor = client.GetContainer("orders", "live")
    .GetChangeFeedProcessorBuilder<OrderEvent>("order-events", HandleAsync)
    .WithInstanceName(Environment.MachineName)
    .WithLeaseContainer(() => client.GetContainer("ops", "leases"))
    .WithStartTime(DateTime.UtcNow.AddMinutes(-5))
    .Build();

await processor.StartAsync();

The HandleAsync method should treat each batch as a unit. If the work for a batch is transactional in nature, wrap it in a try-catch and decide whether to throw, log and continue, or move the failing document to a dead-letter container. Decisions like this are often governed by the Australian Privacy Principles when the data being processed includes personal information; if a failure risks exposing data through a partial update, the delegate should fail loudly and let the lease roll over to another host for retry. Storing failed payloads in a dedicated container gives you a clean target for rehydration jobs and forensic review under the Notifiable Data Breaches scheme.

Consider also the throughput of the underlying container. The change feed itself does not consume extra request units, but the leases container does, and the host application needs enough memory and CPU to keep up with the chosen poll interval. In a small team in Brisbane running a two-instance processor on Basic tier VMs, monitoring the lease container's request unit consumption has caught several production incidents that would otherwise have surfaced as silent lag. The lesson generalises: the lease container is part of your real-time data path and deserves the same operational treatment as any hot table.

Scaling, Reliability and Failure Handling

Scaling the change feed processor is largely a matter of adding instances, because the leases container mediates the work. A common misstep is to add a worker per logical service without considering how partition key ranges line up. If a container has only a handful of physical partitions, throwing more workers at it yields diminishing returns, and the cost of each host may outweigh the throughput benefit. Teams that run containers on Azure Kubernetes Service in the Australia East region often cap their processor count at the partition count observed in the metrics, which keeps the unit economics healthy without hurting responsiveness.

For high-availability deployments, place processor instances in different availability zones. In Australian regions, zone-redundant configuration has become a default ask from regulators and large customers, particularly for the four major banks. Cosmos DB itself offers zone-redundant storage, and the processor library can run across zones as long as no two instances share the same machine name and they all share the leases container. A simple approach is to derive the instance name from the pod name or VM name, which Kubernetes and Azure VM scale sets guarantee to be unique within the cluster.

Observability should not be an afterthought. The processor exposes a ChangeFeedProcessorState from a separate query, and metrics such as estimated lag, work performed, and exceptions are available through Application Insights when you wire the SDK to the standard Microsoft.Azure.Cosmos event source. Australian teams that have adopted the Australian Cyber Security Centre's Essential Eight often map these signals to a central SIEM, since the change feed is frequently the backbone of audit and event-replication pipelines. Lag-based alerts are especially valuable because they catch problems before customers notice downstream effects, and the same alerts feed nicely into a runbook that walks an on-call engineer through a region failover.

Comparing Common Change Feed Approaches

Feature Change Feed Processor library Manual change feed reads with continuation tokens Azure Functions trigger
Lease management Built-in, persisted in a leases container Caller implements and persists continuation state Built-in, persisted in a leases container
Host model Any long-running process, such as a WebJob or container Embedded inside the application request path Serverless function or container app
Horizontal scaling Add instances with unique names Manual partitioning required Function runtime scales with event volume
Operational control High, but more code to maintain Highest, useful for one-off backfill scripts Lowest, constrained by Functions limits
Best fit Steady-state event streaming, microservices, audit logs Targeted backfills, ad-hoc tooling, prototyping Spiky or unpredictable workloads, small teams without container hosting

The processor library is the right starting point for most production systems. Manual reads are best reserved for backfill scripts and one-off migrations, where the cost of standing up a leases container is not worth it. The Functions trigger is convenient but couples the change feed to a Functions Premium or Container Apps hosting plan, which is something Australian teams often debate when the workload is part of a cost-sensitive internal platform serving government agencies subject to whole-of-government cloud procurement rules. The table above is meant as a quick reference, not a strict rulebook; some teams mix approaches, running a Functions trigger for spiky feeds and a processor library for the steady core traffic.

Practical Recommendations for Production Rollouts

  • Always create the leases container in the same account as the source container, but in a separate database, with a default TTL aligned to your recovery objectives.
  • Keep the change feed handler small and idempotent, and forward events to a durable bus such as Service Bus or Event Grid for any non-trivial downstream work.
  • Run at least two processor instances in different availability zones, and use ApplicationPreferredRegions to keep traffic within Australia where latency and data residency matter.
  • Treat the feed as a stateful stream rather than a queue, and build a separate retention strategy if your auditors expect long replay windows under the Privacy Act 1988.
  • Monitor the lease container's request units, the work performed metric, and the estimated lag, and alert on sustained deviation from the baseline.
  • Add a synthetic write that exercises the full handler path during smoke tests, so a silent deserialisation failure does not go unnoticed for weeks.
  • When backfilling historical data, set the start time explicitly and use a dedicated processor instance so that ongoing traffic is not affected.

The Leela Ambience Convention Hotel

1, CBD, Maharaj Surajmal Road, Near Yamuna Sports Complex, Delhi, 110032

KNOW MORE

GENERAL QUERIES


Manish Tewatia

+91-9718-431-042

TICKET QUERIES


Atul Gupta

+91-9910-125-804