首页 > 编程语言 >异步编程基础

异步编程基础

时间:2023-09-24 15:34:57浏览次数:31  
标签:异步 Task return 编程 基础 token GetValueAsync public

使用 async 和 await 进行异步操作的基础知识,其中只会涉及自然异步操作,如 HTTP 请求、数据库指令、Web 服务调用等。

一、需要通过 异步签名实现同步方法时,返回已完成的任务 

如果在继承异步接口或者基类的同时又想同步实现该任务,便可能发生这样的情况。当需要异步接口的简单签名或模拟对象时,或者当需要对异步代码做单元测试时,这项技术特别有用。

 public interface IMyAsyncInterface
    {
        Task<int> GetValueAsync();
        Task DoSomethingAsync();
        Task<T> NotImplementedAsync<T>();
        Task<int> GetValueAsync(CancellationToken token);
        Task<T> DelayResult<T>(T result, TimeSpan delay);
    }

  

 public class MySynchronousImplementation : IMyAsyncInterface
    {
        public async Task<T> DelayResult<T>(T result, TimeSpan delay)
        {//暂停一段时间,当程序需要异步等待一段时间。在进行单元测试或实现重试延迟时,这是一种常见的场景。
            await Task.Delay(delay);
            return result;
        }

        public Task DoSomethingAsync()
        {
            //1.异步签名实现同步方法,并且无返回值
            try
            {
                //DoSomethingSynchronously()
                return Task.CompletedTask;
            }
            catch (Exception ex)
            {//同步实现可能会失败,就应当捕捉异常并通过Task.FromExceptiion 来返回它们。
                return Task.FromException(ex);
            }
        }

        public Task<int> GetValueAsync()
        {
            //2.异步签名实现同步方法,并且有返回值
            return Task.FromResult(13);
        }

        public Task<int> GetValueAsync(CancellationToken token)
        {
            //3.带取消功能的任务 
            if (token.IsCancellationRequested)
                return Task.FromCanceled<int>(token);
            return Task.FromResult(13);
        }

        public Task<T> NotImplementedAsync<T>()
        {
            //4.需要返回异常报错信息
            return Task.FromException<T>(new NotImplementedException());
        }
    }

  

标签:异步,Task,return,编程,基础,token,GetValueAsync,public
From: https://www.cnblogs.com/friend/p/17726041.html

相关文章

  • 深度学习算法中的遗传编程(Genetic Programming)
    深度学习算法中的遗传编程(GeneticProgramming)引言深度学习算法在近年来取得了巨大的成功,广泛应用于计算机视觉、自然语言处理等领域。然而,深度学习算法仍然面临着一些挑战,例如需要大量的标注数据、模型结构的选择等。为了解决这些问题,研究者们开始探索结合遗传编程(GeneticProgram......
  • Java语言基础知识全总结
    一.Java的优点1.      跨平台性。一次编译,到处运行。Java编译器会将Java代码编译成能在JVM上直接运行的字节码文件,C++会将源代码编译成可执行的二进制代码文件,所以C++执行速度快2.      纯面向对象。Java所有的代码都必须在类中书写。C++兼具面向对象和面向过程的特......
  • Markdown的一些基础用法
    Markdown学习标题三级标题四级标题字体Hello,word!Hello,word!Hello,word!Hello,word!引用孤独的鲸分割线图片超链接Typora最后一个免费版本-KoiC-博客园(cnblogs.com)学习时搜到的,觉得实用便保留下来不妥,可删列表ABCABC表格名字性别......
  • python基础 while,for循环
    whlie循环格式while结束条件:执行语句break结束if条件:break小游戏案例猜拳小游戏importrandomren=0ji=0print('-'*12+'欢迎玩猜拳小游戏'+'-'*12)print('本游戏实行三拳两胜制')n=0whilen<3:ran=random.randint(0,2)guess......
  • Uinx\Linux系统编程第九章
    I/O库函数I/O库函数与系统调用系统调用函数:open()、read()、write()、lseek()、close()I/O库函数:fopen()、fread()、fwrite()、fseek()、fclose()相同点:1、目的:I/O库函数和系统调用都用于进行输入/输出操作,以便程序能够与外部设备、文件系统或网络通信。2、提供抽象:它们都提供了一种抽象层,使开......
  • 《Unix/Linux系统编程》教材第10章学习笔记
    大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?必备要素和技能:数据类型和变量:用于存储和处理数据的基本单元。控制结构:用于控制程序流程的结构,如条件语句、循环语句等。函数和模块:用于封装代码块......
  • Flutter/Dart第02天:Dart基础语法(建议收藏)
    本博客原地址:https://ntopic.cn/p/2023092401/Dart官网代码实验室:https://dart.dev/codelabs/dart-cheatsheet特别说明:为了更进一步验证Dart代码特性,下面示例的代码并非与官方代码完全一致(为了探究细节,默认比官方代码要复杂一些)。字符串插值:${}基础语法:字符串中,可以通过${}插......
  • chapter 10:Sh 编程
    chapter10:Sh编程摘要本章主要内容是sh编程,解释了sh脚本和不同版本的sh。它将sh脚本与C程序进行了比较,并指出了解释型语言和编译型语言之间的区别。10.1sh脚本sh脚本是一个包含sh语句的文本文件,用于执行命令解释器sh的命令sh脚本的第一行通常以#!开头,这被称为shebang,指定......
  • 《从零开始的 Zig 编程》Zig 是什么?如何构建并运行一个 Zig 项目
    Zig概述从现在开始我们来一起学习一门新的语言Zig,这门语言估计很多人都没听过,因为即便在国外用的也不是很多,国内几乎还没有公司在用。但这门语言非常优秀,它被称为现代化的C语言,具有安全、快速以及富有表现力等特点。下面我们就从计算机原理的角度,来介绍一下Zig,看看为什么会......
  • linux编程总结
    这块很难说,不太好入门,并且这个知识点涉及繁多,学了还很多没用着,记录的笔记也有些粗糙,所有就不上传了,杂一点的网站就不记录来了牛客网附带项目四十小时从linux全套到webserver,其实就是嗯讲api,项目讲到一半很乱,赶工,可以速刷一遍,项目先别做大丙c++全套知识都有,适合有一点点基础的......