Дмитрий Иванов - Async programming in .NET: Best practices

Sdílet
Vložit
  • čas přidán 15. 08. 2019
  • Ближайшая конференция - DotNext 2024, 10 - 11 сентября, Москва + online
    Подробности и билеты: jrg.su/x2GKnA
    - -
    Всё ли известно про async/await? Мы уверены, что нет - Дмитрий расскажет все тонкости работы с ними.
    Появление async/await в C# привело к пересмотру того, как писать простой и корректный параллельный код. Зачастую, используя асинхронное программирование, программисты не только не решают проблемы, которые были с потоками, но и привносят новые. Дедлоки и рейсы никуда не пропадают - их просто становится труднее диагностировать.
    На основании опыта и наблюдений Дмитрий расскажет про правильные и неправильные паттерны написания асинхронного кода.
  • Věda a technologie

Komentáře • 25

  • @user-is5xi4rq9u
    @user-is5xi4rq9u Před 3 lety +19

    Очень сумбурный рассказ. В следующий раз от общего к частному и без скомканности, пожалуйста.

  • @leobreydo9318
    @leobreydo9318 Před 3 lety +17

    Давно следует понять: хороший_рограммист != хороший_докладчик и прекратить плодить подобные безобразия...

  • @__alexfox__
    @__alexfox__ Před 4 lety +8

    Спасибо. Я даже что-то понял и использую в своей практике. Про каналы прошло мимо, пока не понимаю.

    • @user-gh8iu7kl2v
      @user-gh8iu7kl2v Před rokem

      "Скедлер" блин. Я долго не мог понять, какой еще "скедлер". А потом как дошло, что это "шедулэ". И как поняяял. Вот так вот бывает, Лешк)

    • @__alexfox__
      @__alexfox__ Před rokem

      @@user-gh8iu7kl2v ахах😁 здарова бро

  • @azixaka
    @azixaka Před 3 lety +2

    AsyncLazy решение не рабочее. При первой же материализации beforeList.Select(b => lazy[b].Value) будет KeyNotFound exception. Нигде в коде, элементы из коллекции beforeList не добавляются в lazy dictionary. Возможно там необходимо делать рекурсивный вызов? Я думаю что стоит проверять примеры перед тем как представлять их публике. Комментарий о том что на все было потрачено всего 10 минут и это работает в итоге выглядит несколько непрофессионально.

    • @bfg5244
      @bfg5244 Před 2 lety

      полагаю, как заполнить поле ExecuteBefore не так важно в данном примере. Можно, например, в конструкторе этого AsyncLazy класса, один раз проверив инварианты, чтобы в цикле уже не делать проверки.

  • @rey4eel
    @rey4eel Před 3 lety +6

    Мозг сгорел - либо я тупой (что супер вероятно) либо перебор каких то заимствованных слов произнесеных на русский лад - я тупо терял логику каждую секунду.

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

      Вернулся через 2 месяца с новыми знаниями уже пол лучше , хотя подача один хрен сумбурная

  • @andriivynychenko2675
    @andriivynychenko2675 Před 3 lety +14

    уши сворачиваются от акшонов, токЕнов =(

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

    19:30 все коварство в скобках, никакой магии и сложной логики

  • @user-yi1qb7hd8i
    @user-yi1qb7hd8i Před rokem

    токЕн!? кэнсилить ? Что за .... Уши заворачиваются. Откуда он вылез?

  • @dimarogov8445
    @dimarogov8445 Před rokem

    Чел видно грамотный, но подача материала ужасная.

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

    континюации, скедулер, канселяция.. омг. Русский язык? Нет, не слышал... В остальном доклад отличный!

    • @artemadeev7444
      @artemadeev7444 Před 2 lety

      Чувак you просто не understand. Все вполне logical))))

  • @codeFather2
    @codeFather2 Před 4 lety +13

    Cкедулер, скедлер, шедулер, шедлер. За доклад спасибо, очень интересно было послушать)

  • @eugene3685
    @eugene3685 Před 4 lety +4

    Не понятна проблема с ConfigureAwait. Его использование обязательно когда вы не знаете (не можете контролировать) в каком потоке задача будет запускаться. А это справедливо только для библиотек. В своем же коде (пример автора), нужно понимать что ConfigureAwait делает, иначе вы рескуете запускать все свои подзадачи в UI потоке, что не желательно конечно.

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

      Если вы не знаете в каком потоке будет запускаться задача, то лучше оставить ConfigureAwait(false) на месте, это актуально для библиотек и приложений с UI потоком (WPF, WF и т.п.) В ASP Core например, вызов этого метода избыточен и ничего не даст.

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

      @@GreyAbs для приложений с UI потоком скорее нужно писать ConfigureAwait(true) дабы вернуться в тот же контекст, что был до вызова асинхронного метода, иначе можно получить эксепшен. если далее по коду пытаться работать с какими либо контролами формы в WF.

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

      @@GreyAbs Он дает то что, при завершении таски, вы говорите планировщику: дружище не нужно тратить время на переключение контекста, продолжай на текущем. Оказываеться, что на такое переключение тратится время и рекомендуют этого не делать если нет необходимости.

  • @user-wd5lj2rg4f
    @user-wd5lj2rg4f Před 4 lety +16

    скедулер, акшон, кто это, кто все эти люди О_о