Pro Asynchronous Programming with .NET [electronic resource] /
Blewett, Richard.author.
Clymer, Andrew.author.
Ltd, Rock Solid Knowledge.author.
Pro Asynchronous Programming with .NET teaches the essential skill of asynchronous programming in .NET. It answers critical questions in .NET application development, such as: how do I keep my program responding at all times to keep my users happy? how do I make the most of the available hardware? how can I improve performance? In the modern world, users expect more and more from their applications and devices, and multi-core hardware has the potential to provide it. But it takes carefully crafted code to turn that potential into responsive, scalable applications. With Pro Asynchronous Programming with .NET you will: Meet the underlying model for asynchrony on Windows—threads. Learn how to perform long blocking operations away from your UI thread to keep your UI responsive, then weave the results back in as seamlessly as possible. Master the async/await model of asynchrony in .NET, which makes asynchronous programming simpler and more achievable than ever before. Solve common problems in parallel programming with modern async techniques. Get under the hood of your asynchronous code with debugging techniques and insights from Visual Studio and beyond. In the past asynchronous programming was seen as an advanced skill. It’s now a must for all modern developers. Pro Asynchronous Programming with .NET is your practical guide to using this important programming skill anywhere on the .NET platform.
"Rock solid knowledge"--Cover.
Includes index.
Pro Asynchronous Programming with .NET teaches the essential skill of asynchronous programming in .NET. It answers critical questions in .NET application development, such as: how do I keep my program responding at all times to keep my users happy? how do I make the most of the available hardware? how can I improve performance? In the modern world, users expect more and more from their applications and devices, and multi-core hardware has the potential to provide it. But it takes carefully crafted code to turn that potential into responsive, scalable applications. With Pro Asynchronous Programming with .NET you will: Meet the underlying model for asynchrony on Windows—threads. Learn how to perform long blocking operations away from your UI thread to keep your UI responsive, then weave the results back in as seamlessly as possible. Master the async/await model of asynchrony in .NET, which makes asynchronous programming simpler and more achievable than ever before. Solve common problems in parallel programming with modern async techniques. Get under the hood of your asynchronous code with debugging techniques and insights from Visual Studio and beyond. In the past asynchronous programming was seen as an advanced skill. It’s now a must for all modern developers. Pro Asynchronous Programming with .NET is your practical guide to using this important programming skill anywhere on the .NET platform.
Description based on publisher supplied metadata and other sources.
Cover -- Contents at a Glance -- Contents -- About the Authors -- About the Technical Reviewer -- Acknowledgments -- Chapter 1: An Introduction to Asynchronous Programming -- What Is Asynchronous Programming? -- The Drive to Asynchrony -- Mechanisms for Asynchrony -- Multiple Machines -- Multiple Processes -- Multiple Threads -- Thread Scheduling -- Threads and Resources -- Thread-Specific Resources -- The Stack -- Thread Local Storage -- Registers -- Resources Shared by Threads -- Summary -- Chapter 2: The Evolution of the .NET Asynchronous API -- Asynchrony in the World of .NET 1.0 -- System.Threading.Thread -- The Start Method -- Stopping a Thread -- The Abort Method -- The Interrupt Method -- Solving Thread Teardown -- Another Approach: Background Threads -- Coordinating Threads (Join) -- Controlling a Thread's Interaction with COM -- Issues with the Thread Class -- Using the System Thread Pool -- Worker and I/O Threads -- Getting Work on to the Thread Pool -- ThreadPool.QueueUserWorkItem -- Timers -- The APM -- IAsyncResult -- Dealing with Errors -- Accessing Results -- Polling for Completion -- Waiting for Completion -- Completion Notification -- APM in the Framework -- APM and Delegates -- Changes to Async in .NET 1.1 -- Asynchrony in .NET 2.0 -- Logical and Physical Separation -- Passing Data into a Thread -- Closures -- SynchronizationContext -- Event-Based Asynchronous Pattern -- Error Handling in EAP -- EAP and Cancellation -- Multiple Async Requests -- Minor Changes in .NET 3.5 -- Lambda Expressions -- Thread Pool Heuristics in .NET 3.5 -- Big Changes in .NET 4.0 -- Remodeling the Thread Pool Queue -- Work-Stealing Queues -- Thread Pool Heuristics in .NET 4.0 -- Summary -- Chapter 3: Tasks -- What Is a Task ? -- Creating a Compute-Based Task -- Passing Data into a Task -- Dangers of Closures -- Returning Data from a Task.
Creating I/O-Based Tasks -- Error Handling -- Ignoring Errors -- .NET 4.0 -- .NET 4.5 -- Designing Task-Based APIs -- Cancellation -- Progress -- Task Relationships -- Chaining Tasks (Continuations) -- Why Use Continuations? -- Nested and Child Tasks -- Why Use Child Tasks? -- Conclusion -- Chapter 4: Basic Thread Safety -- Asynchrony and Data -- It's Not Always Good to Share -- Immutable State -- Atomic State Transition -- Nonatomic State Transition -- Correctness Is Not the Only Problem -- Thread Safety -- The Interlocked Class -- Basic Operations -- Richer Functions -- Interlocked.Exchange -- Interlocked.CompareExchange -- Monitor: The Workhorse of .NET Synchronization -- The lock Keyword -- Timing Out of Monitor Acquisition -- Signaling with Monitors -- Signaling As a Building Block -- Optimizing for Read -- ReaderWriterLock -- Problems with ReaderWriterLock -- ReaderWriterLockSlim -- A Semaphore Out of the Box -- Raising the Starting Gate: ManualResetEventSlim -- CountdownEvent: Simplifying Fork and Join -- Barrier: Rendezvous-Based Synchronization -- Crossing the AppDomain Boundary with WaitHandle -- Mutex -- Semaphore -- Events -- WaitHandle-The Kernel Synchronization Abstraction -- Working with Multiple WaitHandles -- WaitHandle.WaitAll -- WaitHandle.WaitAny -- WaitHandle.SignalAndWait -- Integrating Standard Primitives and Kernel Objects -- Synchronization Is Not the Only Answer -- Conclusion -- Chapter 5: Concurrent Data Structures -- Simplifying Thread Safety -- Lazy -- Concurrent Collections -- ConcurrentDictionary -- Locking Mechanics -- ConcurrentQueue and ConcurrentStack -- ConcurrentBag -- Blocking Collections -- Graceful Shutdown -- Consuming Enumerable -- BlockingCollection of X -- Summary -- Chapter 6: Asynchronous UI -- UI Mechanics -- UI Threading Model -- Synchronization Context -- Send and Post.
Task Continuations -- Event-Based Asynchronous Pattern (EAP) -- Background Worker -- Data Binding -- Windows Forms -- Windows Presentation Foundation (WPF) -- WinRT -- WPF Dispatcher -- Obtaining the Dispatcher -- Executing Work Through the Dispatcher -- WinRT Dispatcher -- Obtaining the Dispatcher -- Executing Work Through the Dispatcher -- UI Timers -- Windows Forms Timer -- WinRT and WPF Dispatch Timers -- WPF Freezable Components -- Too Much of a Good Thing -- Summary -- Chapter 7: async and await -- Making Asynchronous Programming Simpler -- What Do async and await Actually Do? -- Returning Values from async Methods -- Should You Always Continue on the UI Thread? -- Task.Delay -- Task.WhenAll -- Task.WhenAll, Error Handling -- Task.WhenAny -- async/await Mechanics -- Summary -- Chapter 8: Everything a Task -- TaskCompletionSource -- Worked Example: Creating a Foreground Task -- Unit Testing and Stubbing Asynchronous Methods -- Building Task-Based Combinators -- Improved WhenAny -- Alternative WhenAll, WhenAllOrFail -- Summary -- Chapter 9: Server-Side Async -- Natural Parallelism -- The Problem of I/O -- ASP.NET WebForms -- A Synchronous WebForms Implementation -- Asynchronous Pages in WebForms 4.0 -- Mark the Page As Asynchronous -- Registering the Asynchronous Methods -- Implementing the "Begin" Method -- Implementing the "End" Method -- Dealing with Multiple Asynchronous I/O Requests -- Handling Errors in Asynchronous Pages Using APM -- Asynchronous Pages in WebForms 4.5 -- ASP.NET MVC -- Asynchronous MVC Processing in .NET 4.0 -- Implementing IndexAsync -- Implementing the IndexCompleted Method -- Take Care with APM -- Performing Multiple Async I/O Operations Within an Asynchronous Action -- Asynchronous MVC Processing in .NET 4.5 -- ASP.NET Web API -- Asynchronous Web API Operations in .NET 4.0.
Asynchronous Web API Operations in .NET 4.5 -- Windows Communication Foundation -- Asynchronous WCF Services in .NET 4.0 -- A Simple Asynchronous Server Operation -- Complex Asynchronous Service Operations -- Error Handling in APM-Based Services -- Asynchronous WCF Services in .NET 4.5 -- Summary -- Chapter 10: TPL Dataflow -- The Building Blocks -- Producer and Consumer Revisited -- Linking Blocks -- Transform Block -- Transform Many Block -- Preservation of Order -- Linking to Multiple Targets -- Conditional Linking -- If/else and switch/case -- Recursion -- Shutting Down Gracefully -- Propagating Completion -- Error Handling -- Cancellation -- Glue Blocks -- Buffer Block -- Batch Block -- Broadcast Block -- Joining -- Greedy and Non-greedy Joining -- Asynchronous Blocks -- Summary -- Chapter 11: Parallel Programming -- What Is Driving the Need for Parallelism? -- Coarse- and Fine-Grained Parallelism -- Task and Data-Based Parallelism -- Is It Worth Trying to Parallelize Everything? -- Before You Parallelize -- Parallel Class -- Parallel.Invoke -- Parallel Loops -- Parallel.For -- Beyond the Trade Show Demos -- Parallel.ForEach -- ParallelLoopState -- Nested Loops -- PLINQ -- Moving from Sequential LINQ to PLINQ -- Partitioning -- Does Order Matter? -- Influencing and Configuring the Query -- ForAll -- Aggregating Results -- Summary -- Chapter 12: Task Scheduling -- ConcurrentExclusiveSchedulerPair -- Why Write a Task Scheduler? -- The TaskScheduler Abstraction -- Implementing QueueTask -- Implementing GetScheduledTasks -- Implementing TryExecuteTaskInline -- Executing Tasks -- Implementing a Custom Scheduler -- Creating a Basic Implementation -- Adding Threads on Demand -- Removing Idle Threads -- Unit Testing Custom Schedulers -- Controlling Execution Order with Synchronization Primitives -- Adding Members to the Scheduler to Provide Insight.
Deriving a Testable Class from the Scheduler -- Summary -- Chapter 13: Debugging Async with Visual Studio -- Types of Multithreading Bugs -- Data Corruption -- Race Conditions -- Deadlocks -- Runaway Threads -- The Limitations of Using Visual Studio for Debugging -- The Interactive Debugger -- It Works on My Machine -- Multithreaded Visual Studio Debugging Basics -- Breakpoints and Threads -- Locals, Autos, and Watch Windows -- The Call Stack Window -- Just My Code -- Improvements in Visual Studio 2013 and Windows 8.1 -- The Threads Window -- Flagging and Filtering -- Freezing and Thawing -- Debugging Tasks -- The Parallel Tasks / Tasks Window -- The Parallel Stacks Window -- The Concurrency Visualizer -- Summary -- Chapter 14: Debugging Async -Beyond Visual Studio -- Memory Dumps -- Generating a Memory Dump -- Task Manager -- DebugDiag -- Adding Rules -- Crash -- Performance -- Native (non-.NET) Memory and Handle Leak -- Executing Rules -- ADPLUS -- Crash Mode -- Spawning Mode -- Hang Mode -- Analyzing Memory Dumps -- WinDbg -- SOS -- Loading SOS -- Examining Threads via SOS -- Diagnosing Deadlocks with SOS -- Finding Runaway Threads -- Other Useful SOS Commands -- SOSEX -- Using SOSEX -- Useful SOSEX Commands -- PSSCOR -- Summary -- Index.
Microsoft .NET Framework.
Microsoft software.
Microsoft .NET Framework.
Software engineering.
Microsoft and .NET.
Software Engineering/Programming and Operating Systems.