Igor Ostrovsky is one of the minds behind the parallel programming support in the .NET Framework. Igor's recently written a great set of articles for MSDN Magazine to cover "The C# Memory Model in Theory and Practice". Part 1 is available now in the December 2012 issue, and it's a great read...
In both .NET 4 and .NET 4.5, PLINQ supports enumerables with up to Int32.MaxValue elements. Beyond that limit, PLINQ will throw an overflow exception. LINQ to Objects itself has this limitation with certain query operators (such as the indexed Select operator which counts the elements processed), but PLINQ has it with more.This ...
This is a question I hear relatively frequently: “I have an async operation that’s not cancelable. How do I cancel it?” The construction of the question often makes me chuckle, but I understand and appreciate what’s really being asked. The developer typically isn’t asking how to cancel the operation...
Astute users of the Task Parallel Library might have noticed three new options available across TaskCreationOptions and TaskContinuationOptions in .NET 4.5: DenyChildAttach, HideScheduler, and (on TaskContinuationOptions) LazyCancellation. I wanted to take a few minutes to share more about what these are and why we added them....
Given that .NET 4.5 has only recently been released in its final form, it’s not surprising that many folks are still very new to the async/await keywords and have misconceptions about what they are and what they do (I’ve tried to clarify some of these in this Async/Await FAQ). One of the more common misconceptions is that a ...
In a post a while ago, I talked about sequential composition of asynchronous operations. Now that we have the async/await keywords in C# and Visual Basic, such composition is trivial, and async/await are indeed the recommended way to achieve such composition with these languages.However, in that post I also described a few “Then&...
Recently I’ve had several folks ask me about how to process the results of tasks as those tasks complete.A developer will have multiple tasks representing asynchronous operations they’ve initiated, and they want to process the results of these tasks, e.g. List<Task<T>> tasks = …; foreach(var t in tasks...
I’ve been asked a few times recently various questions about ExecutionContext and SynchronizationContext, for example what the differences are between them, what it means to “flow” them, and how they relate to the new async/await keywords in C# and Visual Basic. I thought I’d try to tackle some of those questions ...
Several weeks ago, I wrote a post for the Windows 8 app developer blog that was all about using await and AsTask to consume WinRT async operations. I've now published a follow-up post that's all about exposing .NET tasks as WinRT async operation. In a sense, you can think about the first post as showing how to convert from ...