Working with Channels in .NET

Sdílet
Vložit
  • čas přidán 15. 06. 2024
  • Channels enable a producer to safely pass data over to a consumer along with the appropriate notifications in both directions.
    In this episode, Stephen Toub chats with Rich about the what, why and how of using the System.Threadding.Channels library. They walk us through a simple demo of using channels and also discuss the various strategies at our disposal.
    [00:55] - What are channels used for?
    [01:35] - Creating a basic channel implementation
    [09:15] - Moving to System.Threadding.Channels
    [11:34] - What are the benefits of using the System.Threadding.Channels?
    [14:11] - What are some of the available back pressure strategies?
    [20:58] - Working with varying number of producers or consumers
    [21:54] - What are the merits of Channels compared to Pipelines?
    [23:35] - Can channels be used out of process scenarios?
    [24:30] - Can channels be used with pub/sub
    [25:28] - What’s next for channels?
    An introduction to System.Threading.Channels
    devblogs.microsoft.com/dotnet...
    System.Threading.Channels NuGet package
    www.nuget.org/packages/System...
    System.Threadding.Channels on GitHub
    github.com/dotnet/runtime/tre...
    #dotnet #channel #concurrency #runtime
  • Věda a technologie

Komentáře • 43

  • @draganradovac8803
    @draganradovac8803 Před 5 měsíci +11

    Learning is always so easy with Stephen Toub

  • @dune102
    @dune102 Před 4 lety +18

    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.

  • @sergeymikolaitis8205
    @sergeymikolaitis8205 Před 3 lety

    Guys, thanks for this! Informative, useful, clear. I'm pumped for all of the performance improvements things.

  • @ezalddenalmaghout
    @ezalddenalmaghout Před 4 lety +1

    Very informative way to demonstrate the idea.

  • @imensonspionrona2117
    @imensonspionrona2117 Před 2 lety

    Good job men. This piece of infrastructure was desperately needed!

  • @dcuccia
    @dcuccia Před 4 lety +3

    Great discussion! Liked the comparisons to pipelines and pub/sub. Surprised, however, there was no comparison to all the Rx stuff.

  • @krishnaraj8361
    @krishnaraj8361 Před 2 lety

    Nice, Thanks for the good session.

  • @ivandrofly
    @ivandrofly Před 10 hodinami

    Thank you :)

  • @johnnm3207
    @johnnm3207 Před 4 lety +2

    Awesome, thanks I was reading about this last week

    • @CecilPhillip
      @CecilPhillip Před 4 lety

      Channels are amazing once you understand their use case

    • @ssoltani498
      @ssoltani498 Před 4 lety +2

      @@CecilPhillip is there any real world example of that?

    • @willinton06
      @willinton06 Před 4 lety

      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

    • @5pirithief
      @5pirithief Před 4 lety +1

      ​@@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

  • @letgabeequaltrue9097
    @letgabeequaltrue9097 Před 4 lety +26

    I never knew the lead singer to Metallica had a coding channel

  • @AdamsTaiwan
    @AdamsTaiwan Před 4 lety +1

    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.

  • @RasmusSchultz
    @RasmusSchultz Před 4 lety +3

    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.

    • @dandoescode
      @dandoescode Před 3 lety

      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.

  • @NavedRasul
    @NavedRasul Před rokem +1

    Great (high quality) learning content guys! It helped me a lot. Hope it does others as well. 👍🏼🙂

  • @ivandrofly
    @ivandrofly Před 10 hodinami

    10:19 - bound vs unbound writing
    21:50 - comparison with Pipelines

  • @MrRishabSharma
    @MrRishabSharma Před 4 lety

    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

  • @johnernest8109
    @johnernest8109 Před 4 lety +2

    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?

  • @christopherhill9348
    @christopherhill9348 Před 4 lety

    Great feature! I have code to refactor!

  • @conaxlearn8566
    @conaxlearn8566 Před 3 lety +1

    10:54 You're not the only one. 😂😂😂

  • @DriRoPeloMundo
    @DriRoPeloMundo Před 4 lety +1

    can do a real case for use it?

  • @jianglongdu946
    @jianglongdu946 Před 4 lety

    channel like blockingCollection , so what is diff ?

  • @yasser2768
    @yasser2768 Před 3 lety

    You need to add read based on value condition

  • @KarthikChintalaOfficial
    @KarthikChintalaOfficial Před měsícem

    Is Channels inspired from Golang?

  • @srivathsaharishvenk
    @srivathsaharishvenk Před rokem

    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

  • @brynarn
    @brynarn Před 3 lety

    Hello my dudes!

  • @peterferrao5498
    @peterferrao5498 Před rokem

    After the storm

  • @ZintomV1
    @ZintomV1 Před 3 lety

    So basically this is an Async Message Pump.

  • @TeaDrivenDev
    @TeaDrivenDev Před 4 lety +2

    Small nitpick: 10,000ft are about 3km, not 1.

  • @roshanbagohil8786
    @roshanbagohil8786 Před rokem

    Ko

  • @roy_c
    @roy_c Před 4 lety

    Go.NET?

  • @timob24311111
    @timob24311111 Před 4 lety

    not work :(

  • @bob-xm7ny
    @bob-xm7ny Před 3 měsíci

    oh my god let him talk for 10 seconds. This video wasn't supposed to be him explaining to you.

  • @yasser2768
    @yasser2768 Před 3 lety

    Didn't like it much, so I created something called conditional list, way better