Gentle introduction to asynchronous programming on .NET stack. Async-await construct of .Net languages (e.g. C#), its benefits, threads, thread-pool, task, asp.net request handling etc.
Async/await and the Task model are the main features of C# 5/.NET 4.5. While asynchronous programming can be done in most languages, all have different specifics, usage and trade-offs. You will see, in this presentation, what is the asynchronous Task model in .NET and why it matters for web apps.
This Async Await in C# tutorial will acquaint you with a clear understanding of the fundamentals of C# Asynchronous programming. In this C# Tutorial for beginners, you will get better understanding on what is the Asynchronous Programming. we will start with an introduction to Asynchronous Programming,Then we will discuss the need of asynchronous Programming. then we will have the C# Async Await Explained With Example. Finally we will conclude the tutorial with differences between synchronous and asynchronous Programming.
This document discusses asynchronous programming using async/await in C#. It covers why multithreading is important, how to use async/await to offload work or scale applications, and how to properly structure asynchronous code. The key points are: async/await provides an easier way to write multithreaded code compared to previous approaches; methods should be marked async if they use await; and tasks can be used to start asynchronous work and wait for completion in a non-blocking way.
This document discusses asynchronous programming in C# and compares it to synchronous programming. It explains that asynchronous programming allows a thread to pause its execution of a task and switch to another task, while synchronous programming requires a thread to fully complete a task before moving to the next one. It also discusses how asynchronous and synchronous programming can be used in both single-threaded and multi-threaded environments. The document then provides examples of asynchronous programming using the Asynchronous Programming Model, Event-based Asynchronous Pattern, and Task-based Asynchronous Pattern in .NET.
This document provides an overview of asynchronous Apex processing in Salesforce, including future methods, queueable Apex, batch Apex, and scheduled Apex. It defines synchronous vs asynchronous processing, explains when to use each type of asynchronous Apex, and provides examples of how to implement them. Key limits for each type are also outlined, such as limits on queued jobs, executions, and callouts allowed.
Kafka as your Data Lake - is it Feasible?Guido Schmutz
For a long time we discuss how much data we can keep in Kafka. Can we store data forever or do we remove data after a while and maybe having the history in a data lake on Object Storage or HDFS? With the advent of Tiered Storage in Confluent Enterprise Platform, storing data much longer in Kafka is much very feasible. So can we replace a traditional data lake with just Kafka? Maybe at least for the raw data? But what about accessing the data, for example using SQL?
KSQL allows for processing data in a streaming fashion using an SQL like dialect. But what about reading all data of a topic? You can reset the offset and still use KSQL. But there is another family of products, so-called query engines for Big Data. They originate from the idea of reading Big Data sources such as HDFS, object storage or HBase, using the SQL language. Presto, Apache Drill and Dremio are the most popular solutions in that space. Lately these query engines also added support for Kafka topics as a source of data. With that you can read a topic as a table and join it with information available in other data sources. The idea of course is not real-time streaming analytics but batch analytics directly on the Kafka topic, without having to store it in a big data storage.
This talk answers, how well these tools support Kafka as a data source. What serialization formats do they support? Is there some form of predicate push-down supported or do we have to always read the complete topic? How performant is a query against a topic, compared to a query against the same data sitting in HDFS or an object store? And finally, will this allow us to replace our data lake or at least part of it by Apache Kafka?
By James Kirk Cropcho
PyData New York City 2017
Want to start learning asynchronous programming techniques, but you’re feeling blocked? In this talk, I will explain asynchronous execution. Then, using assorted asynchronous libraries and frameworks, I’ll display and discuss different implementations of a realistic application.
The document discusses asynchronous programming in C# using tasks and async/await. It provides examples of using Task.Run to execute work asynchronously and await to wait for asynchronous tasks to complete. It also examines how async/await methods are desugared by the compiler into state machines behind the scenes.
This document discusses various concepts related to CPU scheduling. It begins with definitions of scheduling and explains that the CPU requires a mechanism to allocate time to different processes in a fair manner. It then covers key scheduling concepts like scheduling levels (high, intermediate, low), types (preemptive vs non-preemptive), objectives, and algorithms like FCFS, SJF, priority scheduling, and round robin. The document provides examples and comparisons of different scheduling techniques.
The document summarizes key concepts from Chapter 6 of Operating System Concepts - 9th Edition about CPU scheduling. It discusses the goals of CPU scheduling, including maximizing CPU utilization and throughput. It describes common scheduling algorithms like first-come first-served (FCFS), shortest job first (SJF), priority scheduling, and round robin. It also covers more advanced techniques such as multilevel queue scheduling and multilevel feedback queue scheduling. Evaluation methods like deterministic modeling are presented to analyze and compare the performance of different scheduling algorithms.
Here I have discussed models of parallel systems, criteria for Parallel programming model, computations in parallel programming, Parallelization of programms, levels of parallelism, parallelism in those levels, Static Scheduling, Dynamic Scheduling, explicit and implicit representation of parallelism ect
The Deadlock Problem
System Model
Deadlock Characterization
Methods for Handling Deadlocks
Deadlock Prevention
Deadlock Avoidance
Deadlock Detection
Recovery from Deadlock
This document discusses semaphores, which are integer variables that coordinate access to shared resources. It describes counting semaphores, which allow multiple processes to access a critical section simultaneously up to a set limit, and binary semaphores, which only permit one process at a time. Key differences are that counting semaphores can have any integer value while binary semaphores are limited to 0 or 1, and counting semaphores allow multiple slots while binary semaphores provide strict mutual exclusion. Limitations of semaphores include potential priority inversion issues and deadlocks if not used properly.
Concurrency: Mutual Exclusion and SynchronizationAnas Ebrahim
This document discusses concurrency and synchronization in operating systems. It covers mutual exclusion and how it must be enforced to prevent interference between concurrent processes accessing shared resources. Various synchronization mechanisms are described, including semaphores, mutexes, monitors and event flags. The producer-consumer problem is presented and solutions shown using semaphores to ensure processes can access shared resources like buffers safely. Implementation of semaphores also discussed, needing atomic operations.
Angular & RXJS: examples and use casesFabio Biondi
The document discusses using RxJS in Angular applications. It provides examples of using RxJS operators like interval, map, async pipe, filter, switchMap, exhaustMap, tap, scan, and reduce. Common use cases include handling events, making HTTP requests, managing application state, and manipulating data. RxJS can be used in components, directives, services, routing, forms, and more throughout an Angular application.
Python is a general purpose, dynamic, high-level and interpreted programming language. It is used widely in data science, machine learning, web development, automation and more. Python was created in the 1990s by Guido van Rossum to be an interpreted language that bridged the gap between C and shell scripting. It has many advantages like being readable, cross-platform, having a large standard library and being open source.
The document discusses CPU scheduling in operating systems. It describes how the CPU scheduler selects processes that are ready to execute and allocates the CPU to one of them. The goals of CPU scheduling are to maximize CPU utilization, minimize waiting times and turnaround times. Common CPU scheduling algorithms discussed are first come first serve (FCFS), shortest job first (SJF), priority scheduling, and round robin scheduling. Multilevel queue scheduling is also mentioned. Examples are provided to illustrate how each algorithm works.
(Given to the Vancouver Erlang and Ruby/Rails Meetup groups on May 19, 2009.)
Erlang is an up-and-coming language on the web scene. New libraries and frameworks are sprouting up at a rampant rate, and web giants Facebook and Twitter are using it to develop highly-scalable web applications.
This talk will introduce Erlang as a language and platform, summarize its strengths and weaknesses, and cover how you can use Erlang and Ruby together to conquer the web frontier.
Speaker Bio:
Ken Pratt has been developing software for the web for over 10 years. He fell in love with Ruby four years ago, but is still passionate about learning other languages and platforms. He has developed scalable web services for Electronic Arts, built Rails-based web applications since pre-1.0, and been featured in interactive art installations.
Kafka Summit NYC 2017 - Data Processing at LinkedIn with Apache Kafkaconfluent
LinkedIn uses Apache Kafka extensively to power various data pipelines and platforms. Some key uses of Kafka include:
1) Moving data between systems for monitoring, metrics, search indexing, and more.
2) Powering the Pinot real-time analytics query engine which handles billions of documents and queries per day.
3) Enabling replication and partitioning for the Espresso NoSQL data store using a Kafka-based approach.
4) Streaming data processing using Samza to handle workflows like user profile evaluation. Samza is used for both stateless and stateful stream processing at LinkedIn.
This session goes through the understanding of Apache Kafka, its components and working with best practices to achieve fault tolerant system with high availability and consistency by tuning Kafka brokers and producer to achieve the best result.
This document discusses best practices for REST APIs. It recommends using HTTP methods appropriately, with GET for retrieving resources, POST for creating, PUT for updating entirely and PATCH for partial updates, and DELETE for removing. It also suggests making APIs intuitive, hypermedia-driven, versioned, discoverable and secured. Resources should be addressable and have clear relationships defined between them.
Criando e consumindo Web Services (REST) com o CakePHP2km interativa!
Este documento apresenta uma palestra sobre criação e consumo de web services RESTful com o framework CakePHP. A palestra aborda como criar uma aplicação RESTful no CakePHP, consumir o web service criado e desenvolver um cliente para a API do Twitter.
This document discusses Aspect Oriented Programming (AOP) using the Spring Framework. It defines AOP as a programming paradigm that extends OOP by enabling modularization of crosscutting concerns. It then discusses how AOP addresses common crosscutting concerns like logging, validation, caching, and transactions through aspects, pointcuts, and advice. It also compares Spring AOP and AspectJ, and shows how to implement AOP in Spring using annotations or XML.
This document discusses various types of listeners and filters in Java servlets. It describes ServletContextListener, HttpSessionListener, and other listener interfaces that can be used to track lifecycle events. Filters are used for pre-processing requests and post-processing responses, and implement the Filter interface. The document provides examples of how to configure listeners and filters in web.xml and use them to handle events like session creation/destruction or authenticate users.
Kafka Connect: Real-time Data Integration at Scale with Apache Kafka, Ewen Ch...confluent
Many companies are adopting Apache Kafka to power their data pipelines, including LinkedIn, Netflix, and Airbnb. Kafka’s ability to handle high throughput real-time data makes it a perfect fit for solving the data integration problem, acting as the common buffer for all your data and bridging the gap between streaming and batch systems.
However, building a data pipeline around Kafka today can be challenging because it requires combining a wide variety of tools to collect data from disparate data systems. One tool streams updates from your database to Kafka, another imports logs, and yet another exports to HDFS. As a result, building a data pipeline can take significant engineering effort and has high operational overhead because all these different tools require ongoing monitoring and maintenance. Additionally, some of the tools are simply a poor fit for the job: the fragmented nature of the data integration tools ecosystem lead to creative but misguided solutions such as misusing stream processing frameworks for data integration purposes.
We describe the design and implementation of Kafka Connect, Kafka’s new tool for scalable, fault-tolerant data import and export. First we’ll discuss some existing tools in the space and why they fall short when applied to data integration at large scale. Next, we will explore Kafka Connect’s design and how it compares to systems with similar goals, discussing key design decisions that trade off between ease of use for connector developers, operational complexity, and reuse of existing connectors. Finally, we’ll discuss how standardizing on Kafka Connect can ultimately lead to simplifying your entire data pipeline, making ETL into your data warehouse and enabling stream processing applications as simple as adding another Kafka connector.
eventbrite_kafka_summit_event_logo_v3-035858-edited.png
Since the introduction of C#, async/await concepts are still misunderstood by many developers.
Async programming tries to solve three problems (Offloading, Concurrency, Scalability) in a mean abstraction.
This presentation is a good starting point to asynchronous programming in .net. There are many links and references, so do not hesitate to go deeper.
This is the Async / Await feature added to .NET in .NET 4.5, specifically...Everything I Wish I Knew When I Started Using It! By avoiding the client side discussions around the UI and parallel processing, we can focus on the environment in which most of us live and have both an introduction and deeper dive into how it all works. This is about how we can all use the feature RIGHT NOW to write better performing code.
The document discusses asynchronous programming in C# using tasks and async/await. It provides examples of using Task.Run to execute work asynchronously and await to wait for asynchronous tasks to complete. It also examines how async/await methods are desugared by the compiler into state machines behind the scenes.
This document discusses various concepts related to CPU scheduling. It begins with definitions of scheduling and explains that the CPU requires a mechanism to allocate time to different processes in a fair manner. It then covers key scheduling concepts like scheduling levels (high, intermediate, low), types (preemptive vs non-preemptive), objectives, and algorithms like FCFS, SJF, priority scheduling, and round robin. The document provides examples and comparisons of different scheduling techniques.
The document summarizes key concepts from Chapter 6 of Operating System Concepts - 9th Edition about CPU scheduling. It discusses the goals of CPU scheduling, including maximizing CPU utilization and throughput. It describes common scheduling algorithms like first-come first-served (FCFS), shortest job first (SJF), priority scheduling, and round robin. It also covers more advanced techniques such as multilevel queue scheduling and multilevel feedback queue scheduling. Evaluation methods like deterministic modeling are presented to analyze and compare the performance of different scheduling algorithms.
Here I have discussed models of parallel systems, criteria for Parallel programming model, computations in parallel programming, Parallelization of programms, levels of parallelism, parallelism in those levels, Static Scheduling, Dynamic Scheduling, explicit and implicit representation of parallelism ect
The Deadlock Problem
System Model
Deadlock Characterization
Methods for Handling Deadlocks
Deadlock Prevention
Deadlock Avoidance
Deadlock Detection
Recovery from Deadlock
This document discusses semaphores, which are integer variables that coordinate access to shared resources. It describes counting semaphores, which allow multiple processes to access a critical section simultaneously up to a set limit, and binary semaphores, which only permit one process at a time. Key differences are that counting semaphores can have any integer value while binary semaphores are limited to 0 or 1, and counting semaphores allow multiple slots while binary semaphores provide strict mutual exclusion. Limitations of semaphores include potential priority inversion issues and deadlocks if not used properly.
Concurrency: Mutual Exclusion and SynchronizationAnas Ebrahim
This document discusses concurrency and synchronization in operating systems. It covers mutual exclusion and how it must be enforced to prevent interference between concurrent processes accessing shared resources. Various synchronization mechanisms are described, including semaphores, mutexes, monitors and event flags. The producer-consumer problem is presented and solutions shown using semaphores to ensure processes can access shared resources like buffers safely. Implementation of semaphores also discussed, needing atomic operations.
Angular & RXJS: examples and use casesFabio Biondi
The document discusses using RxJS in Angular applications. It provides examples of using RxJS operators like interval, map, async pipe, filter, switchMap, exhaustMap, tap, scan, and reduce. Common use cases include handling events, making HTTP requests, managing application state, and manipulating data. RxJS can be used in components, directives, services, routing, forms, and more throughout an Angular application.
Python is a general purpose, dynamic, high-level and interpreted programming language. It is used widely in data science, machine learning, web development, automation and more. Python was created in the 1990s by Guido van Rossum to be an interpreted language that bridged the gap between C and shell scripting. It has many advantages like being readable, cross-platform, having a large standard library and being open source.
The document discusses CPU scheduling in operating systems. It describes how the CPU scheduler selects processes that are ready to execute and allocates the CPU to one of them. The goals of CPU scheduling are to maximize CPU utilization, minimize waiting times and turnaround times. Common CPU scheduling algorithms discussed are first come first serve (FCFS), shortest job first (SJF), priority scheduling, and round robin scheduling. Multilevel queue scheduling is also mentioned. Examples are provided to illustrate how each algorithm works.
(Given to the Vancouver Erlang and Ruby/Rails Meetup groups on May 19, 2009.)
Erlang is an up-and-coming language on the web scene. New libraries and frameworks are sprouting up at a rampant rate, and web giants Facebook and Twitter are using it to develop highly-scalable web applications.
This talk will introduce Erlang as a language and platform, summarize its strengths and weaknesses, and cover how you can use Erlang and Ruby together to conquer the web frontier.
Speaker Bio:
Ken Pratt has been developing software for the web for over 10 years. He fell in love with Ruby four years ago, but is still passionate about learning other languages and platforms. He has developed scalable web services for Electronic Arts, built Rails-based web applications since pre-1.0, and been featured in interactive art installations.
Kafka Summit NYC 2017 - Data Processing at LinkedIn with Apache Kafkaconfluent
LinkedIn uses Apache Kafka extensively to power various data pipelines and platforms. Some key uses of Kafka include:
1) Moving data between systems for monitoring, metrics, search indexing, and more.
2) Powering the Pinot real-time analytics query engine which handles billions of documents and queries per day.
3) Enabling replication and partitioning for the Espresso NoSQL data store using a Kafka-based approach.
4) Streaming data processing using Samza to handle workflows like user profile evaluation. Samza is used for both stateless and stateful stream processing at LinkedIn.
This session goes through the understanding of Apache Kafka, its components and working with best practices to achieve fault tolerant system with high availability and consistency by tuning Kafka brokers and producer to achieve the best result.
This document discusses best practices for REST APIs. It recommends using HTTP methods appropriately, with GET for retrieving resources, POST for creating, PUT for updating entirely and PATCH for partial updates, and DELETE for removing. It also suggests making APIs intuitive, hypermedia-driven, versioned, discoverable and secured. Resources should be addressable and have clear relationships defined between them.
Criando e consumindo Web Services (REST) com o CakePHP2km interativa!
Este documento apresenta uma palestra sobre criação e consumo de web services RESTful com o framework CakePHP. A palestra aborda como criar uma aplicação RESTful no CakePHP, consumir o web service criado e desenvolver um cliente para a API do Twitter.
This document discusses Aspect Oriented Programming (AOP) using the Spring Framework. It defines AOP as a programming paradigm that extends OOP by enabling modularization of crosscutting concerns. It then discusses how AOP addresses common crosscutting concerns like logging, validation, caching, and transactions through aspects, pointcuts, and advice. It also compares Spring AOP and AspectJ, and shows how to implement AOP in Spring using annotations or XML.
This document discusses various types of listeners and filters in Java servlets. It describes ServletContextListener, HttpSessionListener, and other listener interfaces that can be used to track lifecycle events. Filters are used for pre-processing requests and post-processing responses, and implement the Filter interface. The document provides examples of how to configure listeners and filters in web.xml and use them to handle events like session creation/destruction or authenticate users.
Kafka Connect: Real-time Data Integration at Scale with Apache Kafka, Ewen Ch...confluent
Many companies are adopting Apache Kafka to power their data pipelines, including LinkedIn, Netflix, and Airbnb. Kafka’s ability to handle high throughput real-time data makes it a perfect fit for solving the data integration problem, acting as the common buffer for all your data and bridging the gap between streaming and batch systems.
However, building a data pipeline around Kafka today can be challenging because it requires combining a wide variety of tools to collect data from disparate data systems. One tool streams updates from your database to Kafka, another imports logs, and yet another exports to HDFS. As a result, building a data pipeline can take significant engineering effort and has high operational overhead because all these different tools require ongoing monitoring and maintenance. Additionally, some of the tools are simply a poor fit for the job: the fragmented nature of the data integration tools ecosystem lead to creative but misguided solutions such as misusing stream processing frameworks for data integration purposes.
We describe the design and implementation of Kafka Connect, Kafka’s new tool for scalable, fault-tolerant data import and export. First we’ll discuss some existing tools in the space and why they fall short when applied to data integration at large scale. Next, we will explore Kafka Connect’s design and how it compares to systems with similar goals, discussing key design decisions that trade off between ease of use for connector developers, operational complexity, and reuse of existing connectors. Finally, we’ll discuss how standardizing on Kafka Connect can ultimately lead to simplifying your entire data pipeline, making ETL into your data warehouse and enabling stream processing applications as simple as adding another Kafka connector.
eventbrite_kafka_summit_event_logo_v3-035858-edited.png
Since the introduction of C#, async/await concepts are still misunderstood by many developers.
Async programming tries to solve three problems (Offloading, Concurrency, Scalability) in a mean abstraction.
This presentation is a good starting point to asynchronous programming in .net. There are many links and references, so do not hesitate to go deeper.
This is the Async / Await feature added to .NET in .NET 4.5, specifically...Everything I Wish I Knew When I Started Using It! By avoiding the client side discussions around the UI and parallel processing, we can focus on the environment in which most of us live and have both an introduction and deeper dive into how it all works. This is about how we can all use the feature RIGHT NOW to write better performing code.
The document discusses asynchronous programming with async and await in C#. It explains that async and await were introduced to address issues with threading like overhead and blocking. Async methods use threads efficiently from the thread pool rather than creating new threads. Await yields threads rather than blocking them. The document demonstrates async programming and best practices like using Task instead of async void. It recommends using async for I/O bound work since it can improve performance over synchronous code.
The document discusses asynchronous programming using async and await in C#. It begins by explaining what asynchronous programming is and why it is useful for improving app responsiveness and simplifying asynchronous code. It then describes how async and await works by generating state machines and using continuation tasks. The document covers some gotchas with async code as well as best practices like naming conventions. It provides references for further reading on asynchronous patterns, tasks, and unit testing asynchronous code.
1) Async and await syntax in C# allows long-running and blocking tasks to run asynchronously without blocking the main thread or UI. This keeps the user interface responsive.
2) Async methods return Task or Task<T> objects and use the await keyword to suspend execution until the awaited task completes. This avoids "callback hell" and makes asynchronous code appear synchronous and easier to read.
3) Popular platforms and frameworks like .NET, Xamarin, Android and iOS have adopted async APIs, allowing asynchronous programming in mobile apps across these platforms using C# and a common syntax.
This document provides an overview of asynchronous programming in C#. It defines asynchronous programming as freeing the current thread while waiting for an I/O operation like a network request to complete. There are two types of asynchronous work: I/O-bound like file access which doesn't need dedicated threads, and CPU-bound like calculations which do. Asynchronous programming keeps apps responsive, improves performance by utilizing multiple cores, and avoids thread pool starvation. It is compared to synchronous programming and different asynchronous patterns are described. The benefits of asynchronous programming in web APIs to handle many concurrent requests are explained. Finally, async/await syntax and its usefulness are covered along with some drawbacks.
This document discusses why asynchronous programming is important. It begins by defining synchronous vs asynchronous programming. It then discusses how asynchronous programming works at a low level using I/O completion ports and shows timelines comparing synchronous and asynchronous operations. The document also covers different asynchronous APIs like Begin/End methods and async/await. It provides examples of available asynchronous APIs in .NET and different platforms. Finally, it shares some practice asynchronous applications on GitHub.
This document discusses asynchronous programming in C# 5. It begins with an introduction to asynchronous concepts like concurrency and parallelism. It then covers the need for asynchronous programming, and how the Task Parallel Library in C# 4 helped address this need. The document goes on to explain the new keywords introduced in C# 5 - async and await - that allow asynchronous code to be written in a synchronous-looking way. It provides an example of using async and await. In summary, the document outlines the concepts around asynchronous programming and how C# has evolved through C# 4 and 5 to better support asynchronous operations.
Async-await best practices in 10 minutesPaulo Morgado
This document summarizes a presentation on async-await best practices in .NET. The presentation covered several principles and guidance around proper usage of async-await, including only using async void for event handlers, preferring async Task over async void elsewhere, using Task.Run for CPU-bound work, and calling ConfigureAwait(false) in library methods to avoid unnecessary context switching. It also discussed differences between sync and async methods from the perspective of callers. The presentation aimed to explain best practices for writing efficient and scalable async-await code.
Async code allows long-running operations like network and file access to execute without blocking the UI thread. There have been several approaches to async programming in .NET including the Async Programming Model (APM), Event-based Async Pattern (EAP), and Task Parallel Library. The newest approach is to use async and await keywords which allow suspending methods until async operations complete and make control flow easier to reason about.
The document summarizes new features in ASP.NET 4.5 for asynchronous processing of HTTP requests and responses. It introduces the ability to read and write request/response streams asynchronously without blocking threads. It also describes how tasks and async/await keywords simplify asynchronous code. Finally, it discusses new request validation features that allow selectively reading unvalidated request data.
The document discusses various topics related to concurrency and parallelism including threads, shared state, locks, asynchronous programming, parallel processing, and reactive programming. It provides examples of using locks, reader-writer locks, thread pools, tasks, and reactive streams. It also covers challenges with concurrent programming such as race conditions, deadlocks, and debugging concurrent applications.
The document discusses async-await in C# and how it works under the hood. It begins with questions about what happens when await is used. It then explains that async-await is used to compose asynchronous code using task continuations generated by the compiler. It discusses how await marks a continuation and depends on the context to determine threading. Windows I/O is used as an example of asynchronous operations without threads. The document concludes with recommendations to avoid deadlocks by not blocking on async code and to only use async-void for event handlers.
The history of asynchronous programming in .NET began with threads and the thread pool to handle concurrency. Later, patterns like the Asynchronous Programming Model (APM) and Event-based Asynchronous Pattern (EAP) simplified asynchronous code but it remained complex. The Task Parallel Library (TPL) and async/await further abstracted asynchronous operations so code more closely resembled synchronous code. Now, asynchronous code no longer requires Wait() or GetAwaiter().GetResult() and avoids potential deadlocks.
I see deadlocks : Matt Ellis - Techorama NL 2024citizenmatt
.NET has LOADS of options for executing code concurrently. Except, sometimes it’s a little confusing what to use - threads, tasks or async/await? What about Reactive Extensions, Dataflow or Channels? Wait, what even is Dataflow? I’ve never heard of Channels! And now we’ve got async enumerable as well?! And what’s the deal with Interlocked, SemaphoreSlim, and friends?! It’s all getting a bit much. In this talk, we’ll take a look at all the different ways you can do concurrent programming with C#, see how they work and when you’d choose one approach over another.
The document discusses asynchronous programming in C# and Visual Basic. It describes the limitations of callback-based asynchronous programming models and how they disrupt control flow and program structure. The document then introduces a new approach using tasks and async/await that aims to make asynchronous code look similar to synchronous code while still handling asynchronous situations appropriately. This new approach proposed in the Async CTP aims to improve the asynchronous programming experience.
This document provides an overview of asynchronous programming using the async and await keywords introduced in C# 5, and the Task-based Asynchronous Pattern (TAP). It discusses earlier approaches to asynchronous programming that were disruptive and error-prone. The new approach uses tasks to represent ongoing asynchronous work, and the async and await keywords to allow asynchronous code to look synchronous. Key aspects covered include using the async modifier on methods, awaiting tasks, task states, cancellation, progress reporting, and building task-based combinators.
The document provides an agenda for a presentation on the Task Parallel Library (TPL) and async/await in .NET. The presentation covers topics like threads and blocking vs non-blocking code, asynchronous programming models before async/await, the lifecycle of async operations, common misconceptions about async/await, differences between CPU-bound and I/O-bound work, exception handling, progress/cancellation, unit testing, combinators like WhenAll and WhenAny, and tips/tricks for async programming.
NDC Sydney 2019 - Async Demystified -- Karel ZikmundKarel Zikmund
NDC Sydney 2019 conference in Sydney, AU - 2019/10/15
Talk: War stories from .NET team by Karel Zikmund
https://sessionize.com/s/karel-zikmund/async-demystified/24175
https://www.youtube.com/watch?v=TgUYcZV-foM
Your startup on AWS - How to architect and maintain a Lean and Mean account J...angelo60207
Prevent infrastructure costs from becoming a significant line item on your startup’s budget! Serial entrepreneur and software architect Angelo Mandato will share his experience with AWS Activate (startup credits from AWS) and knowledge on how to architect a lean and mean AWS account ideal for budget minded and bootstrapped startups. In this session you will learn how to manage a production ready AWS account capable of scaling as your startup grows for less than $100/month before credits. We will discuss AWS Budgets, Cost Explorer, architect priorities, and the importance of having flexible, optimized Infrastructure as Code. We will wrap everything up discussing opportunities where to save with AWS services such as S3, EC2, Load Balancers, Lambda Functions, RDS, and many others.
Reducing Conflicts and Increasing Safety Along the Cycling Networks of East-F...Safe Software
In partnership with the Belgian Province of East-Flanders this project aimed to reduce conflicts and increase safety along a cycling route between the cities of Oudenaarde and Ghent. To achieve this goal, the current cycling network data needed some extra key information, including: Speed limits for segments, Access restrictions for different users (pedestrians, cyclists, motor vehicles, etc.), Priority rules at intersections. Using a 360° camera and GPS mounted on a measuring bicycle, we collected images of traffic signs and ground markings along the cycling lanes building up mobile mapping data. Image recognition technologies identified the road signs, creating a dataset with their locations and codes. The data processing entailed three FME workspaces. These included identifying valid intersections with other networks (e.g., roads, railways), creating a topological network between segments and intersections and linking road signs to segments and intersections based on proximity and orientation. Additional features, such as speed zones, inheritance of speed and access to neighbouring segments were also implemented to further enhance the data. The final results were visualized in ArcGIS, enabling analysis for the end users. The project provided them with key insights, including statistics on accessible road segments, speed limits, and intersection priorities. These will make the cycling paths more safe and uniform, by reducing conflicts between users.
Your startup on AWS - How to architect and maintain a Lean and Mean accountangelo60207
Prevent infrastructure costs from becoming a significant line item on your startup’s budget! Serial entrepreneur and software architect Angelo Mandato will share his experience with AWS Activate (startup credits from AWS) and knowledge on how to architect a lean and mean AWS account ideal for budget minded and bootstrapped startups. In this session you will learn how to manage a production ready AWS account capable of scaling as your startup grows for less than $100/month before credits. We will discuss AWS Budgets, Cost Explorer, architect priorities, and the importance of having flexible, optimized Infrastructure as Code. We will wrap everything up discussing opportunities where to save with AWS services such as S3, EC2, Load Balancers, Lambda Functions, RDS, and many others.
Mastering AI Workflows with FME - Peak of Data & AI 2025Safe Software
Harness the full potential of AI with FME: From creating high-quality training data to optimizing models and utilizing results, FME supports every step of your AI workflow. Seamlessly integrate a wide range of models, including those for data enhancement, forecasting, image and object recognition, and large language models. Customize AI models to meet your exact needs with FME’s powerful tools for training, optimization, and seamless integration
מכונת קנטים המתאימה לנגריות קטנות או גדולות (כמכונת גיבוי).
מדביקה קנטים מגליל או פסים, עד עובי קנט – 3 מ"מ ועובי חומר עד 40 מ"מ. בקר ממוחשב המתריע על תקלות, ומנועים מאסיביים תעשייתיים כמו במכונות הגדולות.
Data Validation and System InteroperabilitySafe Software
A non-profit human services agency with specialized health record and billing systems. Challenges solved include access control integrations from employee electronic HR records, multiple regulations compliance, data migrations, benefits enrollments, payroll processing, and automated reporting for business intelligence and analysis.
TrustArc Webinar - 2025 Global Privacy SurveyTrustArc
How does your privacy program compare to your peers? What challenges are privacy teams tackling and prioritizing in 2025?
In the sixth annual Global Privacy Benchmarks Survey, we asked global privacy professionals and business executives to share their perspectives on privacy inside and outside their organizations. The annual report provides a 360-degree view of various industries' priorities, attitudes, and trends. See how organizational priorities and strategic approaches to data security and privacy are evolving around the globe.
This webinar features an expert panel discussion and data-driven insights to help you navigate the shifting privacy landscape. Whether you are a privacy officer, legal professional, compliance specialist, or security expert, this session will provide actionable takeaways to strengthen your privacy strategy.
This webinar will review:
- The emerging trends in data protection, compliance, and risk
- The top challenges for privacy leaders, practitioners, and organizations in 2025
- The impact of evolving regulations and the crossroads with new technology, like AI
Predictions for the future of privacy in 2025 and beyond
Ivanti’s Patch Tuesday breakdown goes beyond patching your applications and brings you the intelligence and guidance needed to prioritize where to focus your attention first. Catch early analysis on our Ivanti blog, then join industry expert Chris Goettl for the Patch Tuesday Webinar Event. There we’ll do a deep dive into each of the bulletins and give guidance on the risks associated with the newly-identified vulnerabilities.
MuleSoft for AgentForce : Topic Center and API Catalogshyamraj55
This presentation dives into how MuleSoft empowers AgentForce with organized API discovery and streamlined integration using Topic Center and the API Catalog. Learn how these tools help structure APIs around business needs, improve reusability, and simplify collaboration across teams. Ideal for developers, architects, and business stakeholders looking to build a connected and scalable API ecosystem within AgentForce.
Artificial Intelligence in the Nonprofit Boardroom.pdfOnBoard
OnBoard recently partnered with Microsoft Tech for Social Impact on the AI in the Nonprofit Boardroom Survey, an initiative designed to uncover the current and future role of artificial intelligence in nonprofit governance.
FME for Distribution & Transmission Integrity Management Program (DIMP & TIMP)Safe Software
Peoples Gas in Chicago, IL has changed to a new Distribution & Transmission Integrity Management Program (DIMP & TIMP) software provider in recent years. In order to successfully deploy the new software we have created a series of ETL processes using FME Form to transform our gas facility data to meet the required DIMP & TIMP data specifications. This presentation will provide an overview of how we used FME to transform data from ESRI’s Utility Network and several other internal and external sources to meet the strict data specifications for the DIMP and TIMP software solutions.
מכונות CNC קידוח אנכיות הן הבחירה הנכונה והטובה ביותר לקידוח ארונות וארגזים לייצור רהיטים. החלק נוסע לאורך ציר ה-x באמצעות ציר דיגיטלי מדויק, ותפוס ע"י צבת מכנית, כך שאין צורך לבצע setup (התאמות) לגדלים שונים של חלקים.
For the full video of this presentation, please visit: https://www.edge-ai-vision.com/2025/06/addressing-evolving-ai-model-challenges-through-memory-and-storage-a-presentation-from-micron/
Wil Florentino, Senior Segment Marketing Manager at Micron, presents the “Addressing Evolving AI Model Challenges Through Memory and Storage” tutorial at the May 2025 Embedded Vision Summit.
In the fast-changing world of artificial intelligence, the industry is deploying more AI compute at the edge. But the growing diversity and data footprint of transformers and models such as large language models and large multimodal models puts a spotlight on memory performance and data storage capacity as key bottlenecks. Enabling the full potential of AI in industries such as manufacturing, automotive, robotics and transportation will require us to find efficient ways to deploy this new generation of complex models.
In this presentation, Florentino explores how memory and storage are responding to this need and solving complex issues in the AI market. He examines the storage capacity and memory bandwidth requirements of edge AI use cases ranging from tiny devices with severe cost and power constraints to edge servers, and he explains how new memory technologies such as LPDDR5, LPCAMM2 and multi-port SSDs are helping system developers to meet these challenges.
Enabling BIM / GIS integrations with Other Systems with FMESafe Software
Jacobs has successfully utilized FME to tackle the complexities of integrating diverse data sources in a confidential $1 billion campus improvement project. The project aimed to create a comprehensive digital twin by merging Building Information Modeling (BIM) data, Construction Operations Building Information Exchange (COBie) data, and various other data sources into a unified Geographic Information System (GIS) platform. The challenge lay in the disparate nature of these data sources, which were siloed and incompatible with each other, hindering efficient data management and decision-making processes.
To address this, Jacobs leveraged FME to automate the extraction, transformation, and loading (ETL) of data between ArcGIS Indoors and IBM Maximo. This process ensured accurate transfer of maintainable asset and work order data, creating a comprehensive 2D and 3D representation of the campus for Facility Management. FME's server capabilities enabled real-time updates and synchronization between ArcGIS Indoors and Maximo, facilitating automatic updates of asset information and work orders. Additionally, Survey123 forms allowed field personnel to capture and submit data directly from their mobile devices, triggering FME workflows via webhooks for real-time data updates. This seamless integration has significantly enhanced data management, improved decision-making processes, and ensured data consistency across the project lifecycle.
2. ASYNCHRONY
I Am Bit Tricky
To Catch
Trendy
Examples: AJAX, AMD etc. and numerous language-
level/addon implementations
Languages supporting async patterns:
C#:Tasks,
Java7-8: Future and CompletableFuture
Go: Routines and channels,
Erlang: Processes and spawn
Python: tasks, coroutines (asyncio)
JavaScript (ES2017-ES8): Promises
and list goes on.
3. ASYNCHRONY
I'll Call You Back
Occurrence of events independent of the main
program flow
Enables this “main program” continue its work, not
blocking to wait for event results
Implicit degree of parallelism
4. BENEFITS
I Am Not Just
For UI Apps
1. Scalability and
2. Offloading (e.g. responsiveness, parallelism)
Most client apps care about asynchrony for
“Offloading” reasons
For store, desktop and phone apps: primary benefit is
responsiveness
Most server apps care about asynchrony for
“Scalability” reasons
Node.js, ASP.NET Core are inherently asynchronous,
hence scaling is their key.
Common Question: Does async have a place on the
server?
5. GOAL
I Am About To
Discussed More?
History of Asynchronous APIs on .NET
Thread,Threadpool and Task
Conceptual overview of request handling on
ASP.NET
I won’t be covering C# async-await API syntax
6. HISTORY
.Net And .Net
Languages have
Always Been
Loving Async
APM (.NET1.1) : Socket class
Begin<MethodName> and End<MethodName>
methods
EAP (.NET2) : e.g. BackgroundWorker class
<MethodName>Async methods
Task and TPL (.NET4)
Task-based Asynchronous Pattern (TAP) (.NET4.5)
Async and await
Language level support on C# and VB (2012), F#
(2010)
TAP: Recommended asynchronous design pattern
7. THREAD
I Am An Action
Lady
First appears in IBM OS/360 in 1967
Its actual OS-level thread
Gives life to a process
Each process has at least one thread (Main thread)
Threads share their address space
8. CLR THREAD
You should hate
new Thread()
Freaking expensive: Memory and time overhead associated
with them
Thread =
(Thread Kernel Object) x86-700BYTE, x64-1240BYTE
+ (Thread Environment Block) x86-4KB, x64-8KB
+ (User Mode Stack) x86, x64-1MB
+ (Kernel Mode Stack) x86-12KB, x64-24KB
CLR thread directly maps to Windows thread
Highest degree of control that programmers don’t want
Only spun up new if heavy computations on multiple CPUs
needs to be done.
Foreground and background threads
9. THREADPOOL
I manage threads
for you, sir!
Thread pool is a set of threads available readily and
maintained by the CLR.
No control but pool size: Submit work to execute,
wait for good to happen
Best for large no. of short operations where the
caller does not need the result.
10. CONTINUED…
Threadpool size (no. of threads)
Default minimum = No. of processors
Default maximum = 5000 (.NET4.5)
Thread Injection: Starvation avoidance and hill-
climbing algorithm
Threads are added or removed every 500ms
Thread pool categorizes its threads as
Worker threads
I/O completion port (IOCP) threads
11. IIS: REQUEST
HANDLING
Web Dev? You
Need To
Understand Me
An app/web server
Kernel mode and user mode (Native mode)
App pool: Grouping of URLs that is routed to one or
more worker processes.
12. OLD SYNCHRONOUS
WAY
You Devs Love Me,
Don’t You?
ASP.NET takes one of its thread pool threads and
assigns it to just arrived request
Request handler call that external resource
synchronously and blocks it until result returns
13. BAD PART
All Busy,Try
Later
Thread count saturation
Available threads blocked and wasted
New request have to wait and in danger of 503
14. ASYNCHRONOUS
WAY
Don’t Trust Me?
Try Then
Async don’t waste precious threadpool threads
Server could cope new request easily
Smaller number of threads to handle a larger
number of requests.
15. THREADPOOL SIZE
Just Increase Me
And Forget Async
Altogether.
I Do Joke Too
Async does not replace the thread pool, rather
makes optimum use of it
Scales both further and faster than blocking
threadpool threads
Less memory pressure
Can respond to sudden swings in request volume
Common question: What About the Thread Doing
the AsynchronousWork? There must something
monitoring at it, right?
No, not at all
16. TASKS
Some Call Me
FUTURES Others
PROMISES
Best of both worlds
TaskScheduler
Thread Pool Task Scheduler
Synchronization Context Task Scheduler
Task Factories
Task Continuation, Progress and Cancellation
All newer high-level concurrency APIs are all built
on Task.
Task<T> promises to return us a T saying:“not
right now honey, I'm kinda busy, why don't you
come back later? In fact, I will inform you when
I am done or you may cancel me any time you
want”
17. CPU-BOUND
TASK
I Love CPU,
Not You;
Leave Me
Alone
Async Don’ts
Too lightweight I/O (<30ms)
CPU-Intensive Operations
Historic problems with async:
Asynchronous code is difficult
Database backend is a bottleneck
But today ( past few years )
Bottleneck pushed back to app server
18. ASP.NET ASYNC
PATTERNS
Where Were
You?
As If You
Cared? Always
There, Just Bit
Shy
In Asp.Net since very beginning
AsynchronousWeb pages introduced in ASP.NET 2.0
MVC got asynchronous controllers in ASP.NET MVC 2
However, always been awkward to write and
difficult to maintain
Now, the tables have turned
In ASP.NET 4.5, async-await is savior
More and more companies are embracing async
and await on ASP.NET.
25. Old New Description
task.Wait await task Wait/await for a task to complete
task.Result await task Get the result of a completed task
Task.WaitAny await Task.WhenAny Wait/await for one of a collection of tasks to
complete
Task.WaitAll await Task.WhenAll Wait/await for every one of a collection of tasks to
complete
Thread.Sleep await Task.Delay Wait/await for a period of time
Task constructor Task.Run or TaskFactory.StartNew Create a code-based task
26. Problem Solution
Create a task to execute code
Task.Run or TaskFactory.StartNew (not the Task constructor
or Task.Start)
Create a task wrapper for an operation or event TaskFactory.FromAsync or TaskCompletionSource<T>
Support cancellation CancellationTokenSource and CancellationToken
Report progress IProgress<T> and Progress<T>
Handle streams of data TPL Dataflow or Reactive Extensions
Synchronize access to a shared resource SemaphoreSlim
Asynchronously initialize a resource AsyncLazy<T>
Async-ready producer/consumer structures TPL Dataflow or AsyncCollection<T>
27. REENTRANCY
Don’t Exploit Me
For God Sake
Else My Curse
Will Hurt You
Reentering an asynchronous operation before it has
completed
Prevent reentrancy or it can cause unexpected
results
Disable subsequent invokes until its done
Cancel and Restart operation
Run multiple operations and Queue the output
28. FINE TUNING
Want Precision
And Flexibility
To Your Async
App? More APIs
For You
CancellationToken, Task.WhenAll and
Task.WhenAny
Start multiple tasks and await their completion by
monitoring a single task.
Use cases:
Cancel an Async Task or a List of Tasks
Cancel Async Tasks after a Period of Time
Cancel Remaining Async Tasks after One Is Complete
Start Multiple Async Tasks and Process Them As They
Complete
31. To understand why asynchronous requests scale, let’s trace a (simplified) example
of an asynchronous I/O call. Let’s say a request needs to write to a file.The request
thread calls the asynchronous write method.WriteAsync is implemented by the
Base Class Library (BCL), and uses completion ports for its asynchronous I/O. So,
the WriteAsync call is passed down to the OS as an asynchronous file write.The OS
then communicates with the driver stack, passing along the data to write in an I/O
request packet (IRP).
This is where things get interesting: If a device driver can’t handle an IRP
immediately, it must handle it asynchronously. So, the driver tells the disk to start
writing and returns a “pending” response to the OS.The OS passes that “pending”
response to the BCL, and the BCL returns an incomplete task to the request-
handling code.The request-handling code awaits the task, which returns an
incomplete task from that method and so on. Finally, the request-handling code
ends up returning an incomplete task to ASP.NET, and the request thread is freed
to return to the thread pool.
32. Now, consider the current state of the system.There are various I/O structures that
have been allocated (for example, the Task instances and the IRP), and they’re all
in a pending/incomplete state. However, there’s no thread that is blocked waiting
for that write operation to complete. Neither ASP.NET, nor the BCL, nor the OS, nor
the device driver has a thread dedicated to the asynchronous work.
When the disk completes writing the data, it notifies its driver via an interrupt.The
driver informs the OS that the IRP has completed, and the OS notifies the BCL via
the completion port. A thread pool thread responds to that notification by
completing the task that was returned from WriteAsync(); this in turn resumes the
asynchronous request code.
Yes, there were a few threads “borrowed” for very short amounts of time during
this completion-notification phase, but no thread was actually blocked while the
write was in progress.
33. Above example is drastically simplified, but it gets across the primary point: no
thread is required for true asynchronous work. No CPU time is necessary to
actually push the bytes out.
At the device driver level, all non-trivial I/O is asynchronous. Many developers
have a mental model that treats the “natural API” for I/O operations as
synchronous, with the asynchronous API as a layer built on it. However, that’s
completely backward: in fact, the natural API is asynchronous; and it’s the
synchronous APIs that are implemented using asynchronous I/O.
Editor's Notes
#3: AMD: Asynchronous Method Dispatch
Trendy subject: Largest paradigm shift - Sequential to asynchronous programming
#5: If a developer needs to achieve better scalability, they can use any async APIs exposed, and they don’t have to pay additional overhead for invoking a faux async API. If a developer needs to achieve responsiveness or parallelism with synchronous APIs, they can simply wrap the invocation with a method like Task.Run
Scalability benefits is achieved by modifying the actual implementation, whereas offloading can be achieved by just wrapping sync implementations
#7: TAP: System.Threading.Tasks (Task and Task<TResult>)
#8: -In most cases the thread pool will perform better with its own algorithm for allocating threads.
-every process has at least one thread in it
Thread Kernel Object: The OS allocates these data structure to each of the thread created which contains a set of CPU registers. This also contains threads context and consumes space of 700 bytes in X86 and 1240 bytes in X64 bit machines.
Thread Environment Block (TEB): This is the block of memory allocated and initialized in user mode . This consumes 4kb in X84 and 8kb in X64. It helps in storing threads local storage data as well as data structures used in GDI and OpenGL graphics.
User Mode Stack: The user mode stack is used for local variables and arguments passed to methods. It also contains the next statement to be executes when thread returns from method. By default Windows allocates 1MB of memory.
Kernel Mode Stack: It is used when application code passes arguments to Kernel mode function in the OS. This is used mainly for security reasons i.e. when Windows copies any data passed from User mode stack to Kernel mode. Post this process Windows validates the data and operates on them. It consumes 12kb in X86 and 24kb in X64 bit machines.
#10: Worker threads: Async operations as accessing file system, database, services etc.
I/O completion port (IOCP) threads: Used to notify when async operations are completed
Starvation avoidance, the .Net thread pool continues to add worker threads if there is no visible progress on the queued items. In the latter case, the .Net thread pool tries to maximize the throughput using as few threads as possible.
Hence, if your system has four cores, you would have four worker threads and four IOCP threads by default.
#11: Worker threads: Async operations as accessing file system, database, services etc.
I/O completion port (IOCP) threads: Used to notify when async operations are completed
Strategies: Starvation avoidance, the .Net thread pool continues to add worker threads if there is no visible progress on the queued items. In the latter case, the .Net thread pool tries to maximize the throughput using as few threads as possible.
Hence, if your system has four cores, you would have four worker threads and four IOCP threads by default.
#12:
W3WP process which ultimately responds to the request.
App pool: application pool is a way to create compartments in a web server through process boundaries, and route sets of URLs to each of these compartments.
#14: This is all well and good—until your ASP.NET server gets more requests than it has threads to handle. At this point, the extra requests have to wait for a thread to be available before they can run.
Those threads are just blocked waiting for an external call to return. They’re not in a running state and are not given any CPU time. Those threads are just being wasted while there’s a request in need. This is the situation addressed by asynchronous requests.
The third request is already in the system. Its timer is going, and it’s in danger of an HTTP Error 503 (Service unavailable).
#16: Asynchronous code does not replace the thread pool, rather makes optimum use of it
Thread pool has a limited injection rate, a thread per 0.5 second
What About the Thread Doing the Asynchronous Work? Async code frees up the request thread, but only at the expense of another thread elsewhere in the system, right?
#17: All newer high-level concurrency APIs, including the Parallel.For*() methods, PLINQ, C# 5 await, and modern async methods in the BCL, are all built on Task.
#18: Not A Silver Bullet. Well, Nothing in this world Is Except silver bullet itself.
Async and await is all about I/O: Excel at reading and writing files, database records, and REST APIs
Two valid arguments
(thus more developer time compared to just purchasing larger servers); and second
Scaling the app server makes little sense if the database back end is the bottleneck
Modern back ends such as Microsoft Azure SQL Database, NoSQL etc. scale much further, pushing the bottleneck back to the Web server
#19: Many companies decided it was easier all around to just develop the code synchronously and pay for larger server farms or more expensive hosting
in ASP.NET 4.5, asynchronous code using async and await is almost as easy as writing synchronous code.
As large systems move into cloud hosting and demand more scaling, more and more companies are embracing async and await on ASP.NET.
#23: TPL – Effort on Natural Parallelism
Make Your Code Span Across CPU Cores
#29: WhenAny returns a task that completes when any task in a collection is complete.
WhenAll returns a task that completes when all tasks in a collection are complete.
Use cases:
Cancel an Async Task or a List of Tasks (C#).
Cancel Async Tasks after a Period of Time (C#)
Cancel Remaining Async Tasks after One Is Complete (C#)
Start Multiple Async Tasks and Process Them As They Complete (C#)
#32: I/O request packets (IRPs) are kernel mode structures that are used by Windows Driver Model (WDM) and Windows NT device drivers to communicate with each other and with the operating system. They are data structures that describe I/O requests, and can be equally well thought of as "I/O request descriptors" or similar.