Aggreed. I thought a more concrete example is really needed to drive the point home. For example a couple of services responsible for certain tasks, and how this plays with DI. Obviously both services would need to be aware of exactly the same channel.
So I have c# like Notebook app and run workflows in the background. There are several ways of displaying information and would like to know what tech. would work best: Channel, Pipeline, other? 1. Showing progress (ok to lose frames of data) 2. Logging results to a file (frames of data cannot be missed) 3. Logging results to a view (frames of data cannot be missed) I tried using ShareMemory for the progress and reading just last value when possible, but takes a bit to setup.
S Soltani I can think of a couple hundred, basically any time you need to asynchronously listen and react to an API, I have my own implementation of this in basically every server I make, of this shows promise I might go back and refactor a little, although it would be an aesthetic decision, for this is wouldn’t make much of a difference to my implementation, I’ll de finely use channels in future projects tho
@@ssoltani498 Channels can be used like Dataflow blocks. This tutorial gives you real-life scenarios: docs.microsoft.com/en-us/dotnet/standard/parallel-programming/dataflow-task-parallel-library Here is a nice article that explains the difference between Dataflow vs Channel: devblogs.microsoft.com/dotnet/an-introduction-to-system-threading-channels/ github.com/dotnet/runtime/issues/25439
Good enough information to getting started but Is there a way i can connect two different services using a separate channel service and how can i migrate this in memory operation to a persistent data store for fault tolerant
Since Channel.CreateUnbounded has a set number and capacity, is this useful in a scenario like a database record for example say you store a serialized JSON per record in the filesystem and want to avoid race conditions in a high concurrency scenario where clients may be reading from the same table at the same time, but you don't want them to read a record that's in the middle of being written so you need to implement record locking, and there could be multiple records queued up to be written at a time from different clients?
Reactive extensions is much more powerful as it is much higher in abstraction, but this has better backpressure semantics, as this is a low-level construct
Learning is always so easy with Stephen Toub
Nice format, very informative.
Thanks for showing the code, I was able to put it in Visual Studio and try it out.
Great way to learn.
Good job men. This piece of infrastructure was desperately needed!
Very informative way to demonstrate the idea.
I never knew the lead singer to Metallica had a coding channel
What I don't feel you addressed was, what is this for? What are the concrete use-cases for this mechanism? Might be a topic for a follow-up episode.
Aggreed. I thought a more concrete example is really needed to drive the point home. For example a couple of services responsible for certain tasks, and how this plays with DI. Obviously both services would need to be aware of exactly the same channel.
Great discussion! Liked the comparisons to pipelines and pub/sub. Surprised, however, there was no comparison to all the Rx stuff.
Guys, thanks for this! Informative, useful, clear. I'm pumped for all of the performance improvements things.
10:19 - bound vs unbound writing
21:50 - comparison with Pipelines
So I have c# like Notebook app and run workflows in the background. There are several ways of displaying information and would like to know what tech. would work best: Channel, Pipeline, other?
1. Showing progress (ok to lose frames of data)
2. Logging results to a file (frames of data cannot be missed)
3. Logging results to a view (frames of data cannot be missed)
I tried using ShareMemory for the progress and reading just last value when possible, but takes a bit to setup.
Life is good with .net
[21:54] - What are the merits of Channels compared to Pipelines?
Awesome, thanks I was reading about this last week
Channels are amazing once you understand their use case
@@CecilPhillip is there any real world example of that?
S Soltani I can think of a couple hundred, basically any time you need to asynchronously listen and react to an API, I have my own implementation of this in basically every server I make, of this shows promise I might go back and refactor a little, although it would be an aesthetic decision, for this is wouldn’t make much of a difference to my implementation, I’ll de finely use channels in future projects tho
@@ssoltani498 Channels can be used like Dataflow blocks. This tutorial gives you real-life scenarios:
docs.microsoft.com/en-us/dotnet/standard/parallel-programming/dataflow-task-parallel-library
Here is a nice article that explains the difference between Dataflow vs Channel:
devblogs.microsoft.com/dotnet/an-introduction-to-system-threading-channels/
github.com/dotnet/runtime/issues/25439
Good enough information to getting started but Is there a way i can connect two different services using a separate channel service and how can i migrate this in memory operation to a persistent data store for fault tolerant
Nice, Thanks for the good session.
Since Channel.CreateUnbounded has a set number and capacity, is this useful in a scenario like a database record for example say you store a serialized JSON per record in the filesystem and want to avoid race conditions in a high concurrency scenario where clients may be reading from the same table at the same time, but you don't want them to read a record that's in the middle of being written so you need to implement record locking, and there could be multiple records queued up to be written at a time from different clients?
can do a real case for use it?
Is Channels inspired from Golang?
Thank you :)
channel like blockingCollection , so what is diff ?
Reactive extensions is much more powerful as it is much higher in abstraction, but this has better backpressure semantics, as this is a low-level construct
Great (high quality) learning content guys! It helped me a lot. Hope it does others as well. 👍🏼🙂
You need to add read based on value condition
10:54 You're not the only one. 😂😂😂
Great feature! I have code to refactor!
So basically this is an Async Message Pump.
Hello my dudes!
Small nitpick: 10,000ft are about 3km, not 1.
After the storm
oh my god let him talk for 10 seconds. This video wasn't supposed to be him explaining to you.
Ko
Go.NET?
not work :(
Didn't like it much, so I created something called conditional list, way better
Sure, you’re beating Stephen Toub, a distinguished engineer and guarantor of of the perf improvements in recent .NET Core releases.