{"id":25972255,"url":"https://github.com/peteraritchie/dotnetevolution","last_synced_at":"2026-06-07T00:31:38.450Z","repository":{"id":5128396,"uuid":"6294056","full_name":"peteraritchie/dotNetEvolution","owner":"peteraritchie","description":"Code for Evolution of asynchronous programming on .NET session","archived":false,"fork":false,"pushed_at":"2013-01-12T18:30:51.000Z","size":173,"stargazers_count":0,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-07T05:50:27.049Z","etag":null,"topics":["apm","async","asynchronous-methods","conference-session","dotnet"],"latest_commit_sha":null,"homepage":null,"language":"Visual Basic","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/peteraritchie.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-10-19T11:43:54.000Z","updated_at":"2018-10-07T18:01:50.000Z","dependencies_parsed_at":"2022-08-29T08:01:20.313Z","dependency_job_id":null,"html_url":"https://github.com/peteraritchie/dotNetEvolution","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/peteraritchie/dotNetEvolution","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peteraritchie%2FdotNetEvolution","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peteraritchie%2FdotNetEvolution/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peteraritchie%2FdotNetEvolution/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peteraritchie%2FdotNetEvolution/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peteraritchie","download_url":"https://codeload.github.com/peteraritchie/dotNetEvolution/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peteraritchie%2FdotNetEvolution/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34005030,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apm","async","asynchronous-methods","conference-session","dotnet"],"created_at":"2025-03-05T00:32:49.500Z","updated_at":"2026-06-07T00:31:38.425Z","avatar_url":"https://github.com/peteraritchie.png","language":"Visual Basic","funding_links":[],"categories":[],"sub_categories":[],"readme":"VB versions of projects are even-numbered.\n##.NET 1.1:##\n#01 WindowsFormsApplication#\nIntroduces the sample application, asynchronous methods (Begin/End), APM\nExplicit delegates (new DelegateType(...) Control.InvokeRequired explanation, detail StreamHelper\n#02 WindowsApplication#\nIntroduces the sample application, asynchronous methods (Begin/End), APM\n\n##.NET 2.0:##\n#03 WindowsFormsApplication#\nIntroduction of partial types, anoymous methods (anoymous delegates)\n#04 WindowsApplication#\nonly partial types, VB doesn't get anonymous methods yet\n#05 WindowsFormsApplication#\nGenerics in GetScriptBodies, GetScriptBodies becomes iterator method\n#05b WindowsFormsApplication#\nintroduce progress and cancellation, using WebClient instead of WebRequest, introduction of EAP and how Webclient implements EAP\n#05c WindowsFormsApplication#\nProgress and cancellation with BackgroundWorker as example (not optimal use of BG, but correlates to previous examples), \"fake\" progress, lazy code monkey\n#06 WindowsApplication#\nVB version of 05, sans iterator methods: VB doesn't get this in .NET 2.0\n#06b WindowsApplication#\nVB version of 05b\n#06c WindowsApplication#\nVB version of 05c\n\n##.NET 3.0:##\n#07 WindowsFormsApplication#\nvar, problems with foreach(Match..., lambdas, use of expression lambda in BeginGetResponse and statement lambda elsewhere.  encapsulation of asynchronous \"callbacks\" within the method that makes the async call.  Extension methods and StreamExtensions\n#08 WindowsApplication#\nVB version of 07\n#09 WindowsFormsApplication#\nLINQ in GetScriptBodies\n#10 WindowsApplication#\nVB version of 09\n\n##.NET 4.0##\n#11 WindowsFormsApplication#\nTask and Task Parallel Library (TPL), TaskScheduler and FromCurrentSynchronizationContext, no need for InvokeRequired/BeginInvoke, more abstract code and can be used in WPF, etc. EnableButton gone\n#11b WindowsFormsApplication#\nCancellation and progress with TPL, \"fake\" progress, nothing particular to TPL for progress, detail cancellation token source and token and how only token is shared--by value--across threads\n#12 WindowsApplication#\nVB version of 11\n#12b WindowsApplication#\nVB version of 11 b\n\n##.NET 4.5##\n#13 WindowsFormsApplication#\nasync/await, detail lines after await are \"continuations\": compare to ContinueWith code, detail how much less code there is from 01, no need for stream extension, use of \"using\"... detail automatic marshalling to UI thread\n#13b WindowsFormsApplication#\nprogress with async/await.  CancellationTokenSource etc and now IProgress\u003cT\u003e and Progress\u003cT\u003e implementation.\n#14 WindowsApplication#\nVB version of 13\n#14b WindowsApplication#\nVB version of 13b\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeteraritchie%2Fdotnetevolution","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeteraritchie%2Fdotnetevolution","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeteraritchie%2Fdotnetevolution/lists"}