使用 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