Skip to main content

async/wait和ConfigureWait(false)在异步编程中有什么关系?

分类:  .Net技术 标签:  #异步编程 #.Net #基础 发布于: 2023-08-07 22:00:48

我喜欢.Net的最大原因就是.Net是真的提供了很多工具简化编程的难度,并提供了健壮性。尤其是异步编程模式的提出。 .Net使用async和await两个关键字来简化异步编程,不过需要注意的是: 异步编程不是并行编程,和我们提到的多线程编程虽然有联系,但是异步编程不是多线程的那种多任务编程。 异步编程要注意编程任务是基于CPU计算多,还是基于IO多,特别是在基于Asp.net Core Genric Host进行后端服务编程时(例如:写基于Windows或者基于Linux的服务程序,不是指Web编程),特别需要注意区分你的任务是基于IO的还是基于CPU计算的任务。基于CPU计算的任务都需要Task.Factory.new放入runtime的线程池中运行。 在基础的编程模型中我

Read more

在MVVM项目中使用async/await - 数据绑定

分类:  .Net技术 标签:  #异步编程 #.Net #MVVM 发布于: 2023-08-07 21:30:33

今天找到了几篇非常好的文章,这些文章集中讨论了MVVM模式的编程,一一分享给大家。 本篇讨论在WPF & Net MAUI & WinUE3 MVVM项目中使用Async & await进行多任务编程,是基于大牛Stephen Cleary于2014年3月份左右发表的博客。原始页面已经找不到了,进入了微软MSDN杂志的存档了。 之前在网络上搜索了不少文章,这些文章讨论如何在UI环境中使用多线程时无一例外的都是利用例如wpf的dispatcher将长时间运行的线程放置到后台线程中,并通过Dispatcher来更新UI, UI线程无需等待。看到这些代码我都有一个问题,为什么不可以直接使用async/await而避免使用dispatcher来配合多任务编程呢?找了不少方案,自己也尝试设

Read more

创建Azure机器学习的本地环境和云环境

分类:  Azure机器学习 标签:  #Azure #人工智能 #机器学习 #异步编程 发布于: 2023-06-10 22:35:46

Azure机器学习是一个基于Azure云平台的用于机器学习的模型训练,部署,自动化管理和跟踪模型的平台,这个平台提供了非常多的工具,在开始学习这个平台的工具之前,我们先需要准备一个环境,因此我们本篇先快速的介绍创建用于Azure机器学习的环境,后面会直接使用这个环境来持续学习Azure机器学习的平台。 创建Azure机器学习资源,并启动Azure Machine Learning Studio. 创建本地的Azure 机器学习环境。 创建Azure机器学习资源 在创建Azure机器学习资源之前,你需要拥有Azure的订阅,您可以申请Azure免费的订阅。有了订阅之后,您可以登录到Azure的Portal, 然后在市场里搜索Machine Learning, 然后点击创建,在出现的

Read more

深入异步编程

分类:  .Net技术 标签:  #异步编程 #基础 #.Net 发布于: 2023-06-04 19:53:28

本篇是.Net异步编程的最后一篇了,希望这篇可以帮你总结前面几篇学习内容,并且在本章得到升华,也为大家将来在.Net中使用异步编程大大提高您应用吞吐量、性能。 在.Net中编写IO或者CPU异步任务是非常直接的,.Net/.Net Core/Window Runtime支持在语言级别使用Task/Task<T>/async/await几个接口用于异步编程,本章向大家介绍async背后发生的一些基本原理,帮助大家更好的理解async以及await使用。 Task And Task<T> 简单的来讲,Task是一个Promise Model of Concurrency模式的实现,关于什么是Promise Model of Concurrency, 大家可以自行去搜索并学习一下该模

Read more

处理完成的任务

分类:  .Net技术 标签:  #异步编程 #基础 #.Net 发布于: 2023-06-04 19:50:54

本节演示如何使用方法WhenAny()来巧妙的处理多个任务的await, 一定要仔细阅读代码。 本节代码可以从这里找到:https://github.com/hylinux/azure-demo/tree/main/dotnet/basic/asyncdemo/WhenAnyDemo 创建应用 使用如下的命令创建应用 mkdir WhenAnyDemo cd WhenAnyDemo dotnet new console 替换using 以编辑器打开文件Program.cs,替换如下的using语句 using System; using System.Collections.Generic; using System.Diagnostics; using

Read more

定时取消任务

分类:  .Net技术 标签:  #异步编程 #基础 #.Net 发布于: 2023-06-04 19:48:39

我们上一章学习了如何手动的取消任何,本章学习使用方法CancellationTokenSource.CancelAfter定时取消任务,本章的源代码可以在这里找到:https://github.com/hylinux/azure-demo/tree/main/dotnet/basic/asyncdemo/CancelTaskByTime 闲话少说,直接上代码。 创建应用 以如下的命令行创建代码: mkdir CancelTaskByTime cd CancelTaskByTime dotnet new console 替换using语句 以编辑器打开文件Program.cs, 替换using语句如下: using System; using System.

Read more

取消任务

分类:  .Net技术 标签:  #异步编程 #基础 #.Net 发布于: 2023-06-04 19:09:31

我们前面几章学习了异步编程的基本用法和基本理论,本章来学习如何取消一个Task。 用户可以取消还没有完成的任务,实际的基本原理也很简单,只需要给没个异步方法带入CancellationTokenSource的实例就可以了,下面的例子演示如何取消一个任务,您可以从这里找到示例代码:https://github.com/hylinux/azure-demo/tree/main/dotnet/basic/asyncdemo/CancelDemo 该实例的场景是取消从网络上下载内容的web客户端。 创建控制台应用 使用如下的命令行创建控制台应用 mkdir CancelDemo cd CancelDemo dotnet new console

Read more

异步方法的返回类型(C#)

分类:  .Net技术 标签:  #异步编程 #基础 #.Net 发布于: 2023-06-04 19:07:24

我们前面已经学习了关于.Net异步方法的返回有比较常见的几种类型: 返回Task<T>泛型类型,这里的T是指客户具体想返回的类型 返回Task非泛型类型,如果客户的异步方法无需返回值 void, 只能用在事件异步方法中,用于定义方法无需返回值。 除了这几个返回值类型,我们还有如下几种: 从C# 7.0开始,可以返回任何支持方法GetAwaiter的类型对象,返回对象值可以由方法GetAwaiter来返回。 从C# 8.0开始,可以返回类型IAsyncEnumerable<T>类型,主要是针对于异步返回返回一个异步的流(stream) 另外对于windows runtime由如下几种返回类型: DispatcherOperation, 返回窗口的一个异步操作 IA

Read more