Deep .NET: Writing async/await from scratch in C# with Stephen Toub and Scott Hanselman

Поділитися
Вставка
  • Опубліковано 25 лис 2024

КОМЕНТАРІ • 254

  • @majixx
    @majixx 8 місяців тому +394

    Stephen Toub is an absolute treasure for all .NET developers. We defiantly need more content from him. What a great orator and teacher!!

    • @FilipCordas
      @FilipCordas 8 місяців тому +36

      You have to give credit to Hanselman as well he is the best at preventing not to know anything when in fact he is probably as knowledgeable as Stephen.

    • @davecenter2002
      @davecenter2002 8 місяців тому +8

      I love Hanselman and he’s fantastic, but he absolutely is nowhere close to as knowledgeable as Stephen.

    • @shanselman
      @shanselman 8 місяців тому +73

      @@davecenter2002can confirm. We have different jobs. Plus he kinda wrote the thing. 😂

    • @michaltomorowicz596
      @michaltomorowicz596 7 місяців тому +6

      when you have two legends in one vid, debating who is a bigger legend is like arguing which type of sugar is sweeter :D awesome content

    • @san30911
      @san30911 7 місяців тому +2

      Totally. He made me fall in love with C#...

  • @elerius2
    @elerius2 8 місяців тому +242

    More of this, please! Feels like a channel9 video from back in the day.

    • @dotnet
      @dotnet  8 місяців тому +51

      Oh we got more!!!

    • @theFijian
      @theFijian 8 місяців тому +2

      Lol Channel9 really does feel like "back in the day" 🤣

    • @vacc1001
      @vacc1001 7 місяців тому +1

      @@dotnet Is there a place where I can find more videos like this?

    • @dotnet
      @dotnet  7 місяців тому +5

      @@vacc1001 We are releasing more and more. Subscribe and checkout the playlist: ua-cam.com/play/PLdo4fOcmZ0oX8eqDkSw4hH9cSehrGgdr1.html

  • @Daysra
    @Daysra 7 місяців тому +31

    Can I just say how great this duo is. Stephen is awesome at explaining things to a great depth, and Scott knows exactly where to stop and ask for clarifications, at an extent that hits just the sweet spot for me, not being too much. More videos from this duo please.

  • @gpltaylor
    @gpltaylor 7 місяців тому +18

    When I say that I have watched every video and read every article about async and await, I am not exaggerating. However not a single one has come close to educating what this does, why and how to use it and how this is implemented as this does. This is one of the best videos I have seen on this subject.
    I would love to see more videos like this, that deep dive into the technical rather than floating around at surface level

    • @ghostg6107
      @ghostg6107 7 місяців тому

      Kevin Gosse also did a deep dive on async await. Stephen Cleary has a walkthrough of the history of Task.

  • @s.hosseinhosseini8330
    @s.hosseinhosseini8330 8 місяців тому +100

    This was amazing.
    Why I love this?
    1. Scott Hanselman
    2. Stephen Toub
    3. An actual deep dive into a concept with a high-quality explanation of it.

    • @computer9764
      @computer9764 7 місяців тому +3

      3.1. It didn't have a ridiculous thumbnail.

  • @tomglenn6019
    @tomglenn6019 8 місяців тому +94

    I was already very familiar with how tasks/async/await work under the covers but seeing Stephen effortlessly "reimplement" it without copying and pasting or using notes is a humble masterclass of intellectual horsepower.

  • @tedchirvasiu
    @tedchirvasiu 7 місяців тому +33

    I love how Scott asks all the right questions.

  • @ThorstenSauter
    @ThorstenSauter 8 місяців тому +59

    This was an absolute delight to watch. Thank you Stephen and Scott!

  • @Anubis10110
    @Anubis10110 8 місяців тому +45

    Wow we need more topic like this please. We need more of .net core internals

    • @dotnet
      @dotnet  8 місяців тому +18

      Oh we have more!!!!!

    • @Escalator0921
      @Escalator0921 8 місяців тому

      Looking forward to more ​@@dotnet

    • @Escalator0921
      @Escalator0921 8 місяців тому +1

      ​@@dotnetor do you already have a playlist with topics like this

    • @Escalator0921
      @Escalator0921 8 місяців тому

      Strongly agree

  • @CecilPhillip
    @CecilPhillip 8 місяців тому +46

    Great video. Would love to see a dive into IAsyncEnumerable implementations

    • @dotnet
      @dotnet  8 місяців тому +7

      Thanks for the idea! Hope you are doing well Cecil 💖

    • @ChaseFreedomMusician
      @ChaseFreedomMusician 7 місяців тому

      @@dotnet I would love to see an example implementation of IQueryable, it is so non-approachable even for simple tasks, but it is an incredibly powerful feature.

  • @pmnm113
    @pmnm113 8 місяців тому +7

    after watching this I am youtubing about Stephen Toub videos. We need more content from him. I was nice to see low level design of async await here. thanks!

  • @runtimmytimer
    @runtimmytimer 8 місяців тому +16

    Love this deep dive stuff. Too much 101 content and almost zero 400 content.

  • @WespazjansDad
    @WespazjansDad 7 місяців тому +7

    Superb stuff. Scott leads it well, without interrupting too much. And Stephen delivers pure meat. That is one of these few precious resources that despite the fact they last for ah hour, I personally need a few hours to analyze, rewind and make sure all these topics really click in my head.

  • @JSWarcrimes
    @JSWarcrimes 7 місяців тому +5

    Now this is some premium content.

  • @minimalistdeveloper
    @minimalistdeveloper 8 місяців тому +3

    Loved this. This is the video equivalent of Csharp in Depth and CLR via Csharp. Kindly do more of these level 300 topics.

  • @fullemptiness
    @fullemptiness 8 місяців тому +2

    What a great idea to teach such a complex topic! It's like you found the missing piece in my (most .NET devs?) understanding to async programming!... Please do a series on async programming like this episode. Thanks!

  • @ArnonDanon
    @ArnonDanon 8 місяців тому +17

    Scott & Stephen rewriting async await reminded me David & Damian rewriting SignalR on stage. All dotnet devs out there are standing on the shoulders of Giants🙏🏼
    This is great content

    • @metaturso
      @metaturso 7 місяців тому

      Link please?

  • @itaccount1993
    @itaccount1993 14 днів тому

    04:23 - запустил работу и не стал ее ожидать
    05:11 - у тебя не может быть параллельности без асинхронности, но может быть асинхронность без параллельности
    05:47 - пример с циклом от 0 до 1000
    11:26 - 2 вида Thread: foreground и background
    13:08 - в реальном ThreadPool не будет ограниченного числа Environment.ProcessorCount, это число изменяется (увеличивается или уменьшается)
    14:13;15:07 - execution context
    19:05 - определение execution context
    26:21 - Task это структура данных
    28:33 - Task in not only about operation its also interacting with that operation
    44:11 - Реализовав MyTask мы получили копию настоящего класса Task за исключением деталей перфоманса
    48:17 - Interlock why
    50:13 - why not use Thread.Sleep
    56:18 - в цикле работать не будет

  • @ChaseFreedomMusician
    @ChaseFreedomMusician 7 місяців тому +1

    This is by far one of my favorite videos to-date.

  • @StephenGierek
    @StephenGierek 8 місяців тому +1

    This was really great! I've always struggled wrapping my head around how async/await works, but this method of instruction is extremely effective in conveying what's going on under the hood. Please, more like this. I could watch these all day long. 🙂

  • @imranhussain8700
    @imranhussain8700 8 місяців тому +3

    This is some crazy stuff. Stephen Toub is amazing. Scott Hanselman has done a fantastic job as usual for the viewers to ensure the topic is covered as much in depth as possible.
    Thank you very much. We need morrrrrrrrrrrrrrreeeeeeeeeeeeeeeeeee of these for sure.

  • @DannysGalaxyTab
    @DannysGalaxyTab 8 місяців тому +8

    What a great video idea. Great hosts to listen to as well.

  • @MatthiXXY
    @MatthiXXY 3 місяці тому

    Man. I needed this video 12 years ago in some way. I noticed while watching I still have missing knowledge and I am amazed how much you can learn in about an hour. Thanks so much. This was great.

  • @7th_CAV_Trooper
    @7th_CAV_Trooper 5 місяців тому +1

    These amazing Hanselman / Toub videos need to be added to a playlist.

    • @dotnet
      @dotnet  5 місяців тому +2

      Check this out: ua-cam.com/play/PLdo4fOcmZ0oX8eqDkSw4hH9cSehrGgdr1.html

    • @7th_CAV_Trooper
      @7th_CAV_Trooper 5 місяців тому +1

      @@dotnet awesome!!! Thank you 🙏

  • @MatthiWare
    @MatthiWare 8 місяців тому +9

    Amazing video! I would love to see more content like this.

  • @SlackwareNVM
    @SlackwareNVM 8 місяців тому +2

    This was fantastic! I'd love a couple of more episodes that go into the optimizations that can be layered on top of this implementation.

  • @ivandrofly
    @ivandrofly 5 місяців тому

    16:22 - async local
    18:03 - ExecutionContext
    23:46 - ! and ? operator
    34:00 - locking to 'this'

  • @gilbertsenyonjo963
    @gilbertsenyonjo963 2 місяці тому

    Wow. I cant say how much I appreciate this series. This video has been one of the best in the series. I followed along and learnt alot.

  • @bity-bite
    @bity-bite 8 місяців тому +4

    Great video! I love this style of rewriting stuff to explain how it works internally. We'd love more videos like this one

  • @papafe
    @papafe 7 місяців тому +2

    Super interesting! I think it would be interesting also to dive deep into SynchronizationContext and how it relates to the ExecutionContext that was shown in the video

  • @fredyjimenez4853
    @fredyjimenez4853 8 місяців тому +2

    This is best explanation to fully understand async/await.
    Greate quality content
    Kudos to Scott and Stephen

  • @prakharlondhe3876
    @prakharlondhe3876 4 місяці тому

    This series is by far my favorite youtube playlist of all time!

  • @moke_codes
    @moke_codes 7 місяців тому +1

    This was amazing! I wish we could see more advanced topics like this. Learned a lot! Thanks guys!

  • @vedantkoditkar5968
    @vedantkoditkar5968 8 місяців тому

    If only there is a way to give million up vote to this video. I always look forwards to Stephen Toub videos, his explanation is top notch.

  • @CraigShearer
    @CraigShearer 8 місяців тому +2

    Great info. Been away from C# for a few years, but nice to see this detailed as to how async/await works.

  • @zksward
    @zksward 8 місяців тому +1

    Really love to see this kind of in depth content coming from the team. We need mooooore!

  • @PhoenixCustomerInsights
    @PhoenixCustomerInsights 8 місяців тому +2

    I would love to strive for that clarity of knowledge in tasks. I'm holding on to this video for another review and letting it wash over me a few times. Could there be a continuation in the parallel processing of tasks, comparing concurrency and parallel execution of Tasks?

  • @stephajn
    @stephajn 8 місяців тому

    Like Admiral Kirk said to Saavik in Wrath of Khan, “You have to know WHY things work on a starship.”
    This was definitely really cool to watch and follow! Gonna have to watch it again on a PC as opposed to my iPad, but it is well worth it!

  • @TheProTip
    @TheProTip 7 місяців тому

    This is great. I've never actually heard Stephen talk though I've read a bunch of his perf reports and other posts. He presents very well.

  • @BryanKelly
    @BryanKelly 7 місяців тому

    First, I loved this video. Just everything about it was good.
    I would love a follow up to cover:
    1. more of the async/await keywords (the stuff you were getting to at the very end)
    2. Why doing the "bad" things is bad. (ex. .Result, and others I'm failing to think of now)
    3. Async enumerable

  • @draganradovac8803
    @draganradovac8803 6 місяців тому

    I was going to skip this one thinking it would be the "same old" about async/await. Boy was I wrong. That was amazing. Thank guys.

  • @DotNetRyanYT
    @DotNetRyanYT 8 місяців тому +1

    Thanks for this. Async/await was always a black box to me, but now I feel I have lifted the lid on the box and took a look inside.

  • @SajadJalilian
    @SajadJalilian 7 місяців тому

    We really need Stephen do more live coding. He is really good at delivering what he does

  • @emiraksoy1520
    @emiraksoy1520 8 місяців тому +1

    This was amazing we want more content with Steve 💯💯

  • @--Eric--
    @--Eric-- 7 місяців тому

    Thanks Stephen and Scott, this was a great session. More please... 👏🏼

  • @sachinvshishth
    @sachinvshishth 7 місяців тому +1

    Thank you for the insightful session. Just a quick request: could you please utilize the dark theme whenever feasible?

  • @cheekychappy1234
    @cheekychappy1234 6 місяців тому

    Such a fantastic video! Keep producing more and don't be afraid to dive deeper and deeper.

  • @neeleshbodgal7479
    @neeleshbodgal7479 8 місяців тому

    That helps to understand more and better about the Task API. Stephen Toub blogs are worth reading that always teach me something new 😀

  • @Hereson
    @Hereson 8 місяців тому +1

    Amazing explanation, please do more of these!

  • @FXK23
    @FXK23 8 місяців тому +1

    Definitely going to watch this again and code along. Excellent video!

  • @mambocollective
    @mambocollective 7 місяців тому

    Great video. Learnt so much from this. Definitely need more content like this, especially with Stephen. It worked so well with him leading the way and then you pulling him back with questions I had in my own head. Looking forward to more of this sort of content.🤩

  • @nenadvicentic
    @nenadvicentic 6 місяців тому +1

    Will there be a part two of `async/await`? It would be really nice to see how to implement `AsyncMethodBuilder`. Judging by the blog post "How Async/Await Really Works in C#", there is enough uncovered material for another full episode. 😅

  • @acedonk
    @acedonk 8 місяців тому +9

    This was a masterclass, thanks!

  • @giovannimorleschi1750
    @giovannimorleschi1750 7 місяців тому

    Awesom, semply awesom, you have to do a lot of this video please! Stephen Tuob, you are ten thousand time better then the better professor in tis solar system!

  • @v001
    @v001 8 місяців тому

    Stephen Toub is a legend! great talk, need more of this

  • @AslamNazeerShaikh
    @AslamNazeerShaikh 8 місяців тому +6

    Please make videos on "cancellation token"

  • @northshorepx
    @northshorepx 7 місяців тому

    That was a really great tutorial. Seeing how everything is continuations all the way down was incredibly eye opening. I'd love to see more details like this please. However I have one small nitpick, that of Stephen constantly making the font way too small to read. Scott kept picking him up on it, but it's really important for us who are watching to be able the read the code that they're writing and thus for presenters to realise how video tutorials need zoomed up fonts.

  • @DOTNETMAN
    @DOTNETMAN 8 місяців тому +4

    The Legends of .NET.

  • @fifty6737
    @fifty6737 8 місяців тому +2

    awesome video, always pleasure to listen to stephen

  • @teraformerr
    @teraformerr 2 місяці тому

    understood so many concepts thanks to this video, really really good stuff guys

  • @VukManic
    @VukManic 8 місяців тому

    What an amazing video! This is one of best video to understand async await!!!! Thanks to both of you! Really enjoyed it!

  • @sudeshryan8707
    @sudeshryan8707 8 місяців тому +8

    This is gem of a tutorial. Thanks guys

  • @danfriedman7009
    @danfriedman7009 6 місяців тому

    Immensely helpful. You guys rocked this presentation. Can't wait to watch the LINQ videos (and I hope there is more on the way).

  • @KenRossPhotography
    @KenRossPhotography 8 місяців тому

    Awesome video - so many great nuggets here. Even if you think you *know* async/await, you'll get value from watching this (maybe more than once) 🙂

  • @thedanielspindler
    @thedanielspindler 8 місяців тому

    Loved this. Amazing! Now I just need to re-watch it another 5 times at 0.5 speed to really soak it all in.

  • @SharpGIS
    @SharpGIS 8 місяців тому +1

    Loved this. Please do more Level 3-400 content!

  • @codewithkhondamir
    @codewithkhondamir 8 місяців тому +2

    That’s amazing. Thanks Scott and Stephen.

  • @chenc671
    @chenc671 8 місяців тому

    Wow, It was a Master piece when the await works at the end !

  • @paaabl0.
    @paaabl0. 8 місяців тому +1

    Brilliant demo! Thank you guys!

  • @pachanga5382
    @pachanga5382 8 місяців тому +1

    Excellent video-I was wondering at first why I needed to know this, and now I know!

  • @paulecampbell
    @paulecampbell 8 місяців тому +1

    Stephen is on another level!

  • @boysen01
    @boysen01 7 місяців тому +2

    Great video. But could have followed the premise of "looking at async/await before it was invented" even closer. So before a/a came to be, what issues did people have? Should have shown an example where you get problems due to not having async/await available. So in a setting where we do not have a/a available, we know that we need to code a thread pool? I mean, a lot of cool stuff shown here but a bit more "college-level" hand-holding would have been awesome and more in line with the premise from the intro

  • @RickJohnn
    @RickJohnn 8 місяців тому +1

    Excellent from start to finish.

  • @danielvillalba4457
    @danielvillalba4457 8 місяців тому +1

    Wow, just amazing information and even better way to explain it! Thanks

  • @jmbrjmbr2397
    @jmbrjmbr2397 6 місяців тому

    Very interesting and enlightening lecture. Thank you for your efforts.

  • @obinnaokafor6252
    @obinnaokafor6252 8 місяців тому +2

    Scott and Stephen should do videos on Tensor Primitives in dotnet. And other ML types and improvements in dotnet and C#

  • @stevanfreeborn
    @stevanfreeborn 8 місяців тому +3

    Thank you for making this! 🙏🏻

  • @WalderFrey
    @WalderFrey 4 місяці тому

    Absolutely brilliant. Thanks lads.

  • @krccmsitp2884
    @krccmsitp2884 8 місяців тому +1

    Amazing! Thanks to both of you! 🙂

  • @michaltomorowicz596
    @michaltomorowicz596 7 місяців тому

    What a great material guys, massive kudos.

  • @bendev333
    @bendev333 8 місяців тому

    Loved this video, hope we will get more of these

  • @unknown.artist.track3
    @unknown.artist.track3 6 місяців тому

    I had already bookmarked your article from dev blog about async await)))

  • @MatteoGariglio
    @MatteoGariglio 7 місяців тому

    I wish I watched this video long time ago 😅.
    Thank you so much Stephen, the explanations are really instructive.

  • @tarun-hacker
    @tarun-hacker 8 місяців тому +2

    Stephen Toub is awesome.

  • @ralmslb
    @ralmslb 6 місяців тому

    This one deserved a part 1 and part 2, to better go on a slower pace around the await keyword, etc.
    Felt that was mostly just around Tasks, that is inherently to async await, but still, doesn't allow to have a good peak on await functionality and nuances.

  • @fyiitscam
    @fyiitscam 8 місяців тому +2

    Im a little confused at 37:43. How does calling the ContinueWith within the wait method not override the existing _continuation with a new action(the mres.Set)? I feel like it would forget what the user set ContinueWith action was. What am i missing here?

    • @shanselman
      @shanselman 8 місяців тому

      Stephen says “MyTask as a simplification for pedagogical purposes only allows a single continuation, but the real Task supports any number. I'd intended to add a check in ContinueWith that would throw if _continuation was already set, but neglected to do so.”

    • @fyiitscam
      @fyiitscam 7 місяців тому

      @@shanselman where does he say this? cant find it in the transcript

    • @sgbench
      @sgbench 3 місяці тому

      ​@@fyiitscamI think Scott is relaying what Stephen said in response to your *comment*, not a quote from the video

    • @RajDhana586
      @RajDhana586 3 місяці тому

      I had the exact question and looked into the actual Task implementation in the runtime. It is keeping a list of Tasks as continuation.

  • @Rolan18111
    @Rolan18111 7 місяців тому

    Excellent video - that certainly removed a lof of the "ghosts in the machine" feel of async/await. I feel like de-implementing syntactic sugar would be another good video topic. Take some modern c# code and replace all the syntactic sugar with the underlying implementations. And/Or show how you can look up the underlying implementations quickly & easily.

  • @brechtlaitem
    @brechtlaitem 8 місяців тому +4

    We want more, we want more!!

    • @dotnet
      @dotnet  8 місяців тому +4

      We are making more right now!!!!!!!!!!!!!!!!

  • @GuildOfCalamity
    @GuildOfCalamity 8 місяців тому

    Great tutorial. I would recommend balancing the mic levels next time before recording. Stephen's levels were much lower than Scott's.
    You guys should to do more of these "behind the curtain" tutorials.

  • @timeless-sg
    @timeless-sg 7 місяців тому +2

    Did you see that "Hello, Scoot" at 51:28 ?

  • @tarsala1995
    @tarsala1995 8 місяців тому

    Great video. What do you think of going through the implementation of basic GC with Stephen Toub?

  • @sjark5000
    @sjark5000 6 місяців тому

    This is just fantastic content, more of this please :)

  • @kRySt4LGaMeR
    @kRySt4LGaMeR 6 місяців тому

    Watching Stephen doing this is amazing. Scott on the other hand has extremely lack luster contributions.

  • @robl39
    @robl39 8 місяців тому +4

    Now get David Fowler to write Kestrel from scratch. I’d love to see that.

  • @spydacarnage
    @spydacarnage 2 місяці тому

    What I'd really love to see is a proper look into how to use AsyncMethodBuilder - I can't find any reasonable documentation, and it's something I'd really like to employ

  • @jackkendall6420
    @jackkendall6420 8 місяців тому +1

    This was incredibly good.

  • @CodeWithAnup
    @CodeWithAnup Місяць тому

    Thats wonderfull explanation. Really enjoyed it. Now I have better understanding how this magic happens under the hood.

  • @saqwerUA
    @saqwerUA 7 місяців тому

    I love the explanation so much! Please, do such a deep diving content at least from time to time! However, I noticed that some numbers were missed... Even taking into account concurrency pressure in delegates' "queue" is it expected behaviour? I don't think it should happen on this tiny example from 1 to 1000.

  • @CarlintVeld
    @CarlintVeld 5 місяців тому

    Incredible video! Now I am curious about your personal async implementation as well 😅 Can I find it somewhere?

  • @ralmslb
    @ralmslb 6 місяців тому

    37:45 This one confused me a bit.
    Won't hooking the ManualResetEventSlim trigger to ContinueWith have the possibility of overriding what a caller might have defined, since we only store a single action under _continuation?