首页 > 其他分享 >没有async,await标志的异步方法

没有async,await标志的异步方法

时间:2023-02-01 00:24:30浏览次数:118  
标签:异步 Task return random async await

1.我们看到有些异步方法源码内部未出现async,await的

之前我们就知道,当使用了async,await时,所有的await代码会被反编译成一个一个的状态机以及生产一个异步类,效率远不如普通方法。那么,什么样的异步方法无需async标记呢?

答案是这个异步方法中无需对其他的异步方法返回值进行处理,只是简单的转发结果就可以不标记。我们看源码,这个异步方法内部甚至都没有await。

所以对于该异步方法直接这样写也是可以的

static void Main(string[] args)
{
     string filename = @"C:\Users\张跑跑\Desktop\net\Cache\docment.txt";
     File.ReadAllTextAsync(filename);
}

现在我们改造之前的Task.Run代码,因为委托的源码也是直接返回委托结果,未对委托结果处理

//之前:
        static async Task<double> TestAsync()
        {
            return await Task.Run(() =>
            {
                //异步中线程
                Console.WriteLine("异步后线程:" + Thread.CurrentThread.ManagedThreadId);
                double n = 0;
                Random random = new Random();
                for (int i = 0; i < n*n; i++)
                {
                    n = random.NextDouble() ;
                }
                return n;
            });
        }


//改造去掉await后正常运行:
			  static Task<double> TestAsync1()
        {
            return Task.Run(() =>
            {
                //异步中线程
                Console.WriteLine("异步后线程:" + Thread.CurrentThread.ManagedThreadId);
                double n = 0;
                Random random = new Random();
                for (int i = 0; i < n*n*n; i++)
                {
                    n = random.NextDouble() ;
                }
                return n;
            });
        }

2.何时必须用async,await

当要对异步结果进行处理时

标签:异步,Task,return,random,async,await
From: https://www.cnblogs.com/long-live/p/a.html

相关文章

  • 异步任务队列
    异步任务队列Task.WhenAll(List<Task>)等List中所有的异步任务完成后才算完成Task.WhenAny(List<Task>)List中某个完成就完成较常用的是Task.WhenAll(List<Task>)不aw......
  • await使用不当引发的异常
    1、异步方法不await引发异常向文件写入大量内容:因为WriteAllTextAsync是独占式写入,又不等待,都没写完就到下一行读,肯定占用进程报错!2、await等待了一个非异步的方法......
  • openresty 中主要的几种异步执行方式
    openresty中主要的几种异步执行方式openresty宣传是同步非阻塞(100%non-blocking)的,基于事件通知的Nginx给我们带来了足够强悍的高并发支持。可以让我们可以使用同......
  • 通过一个示例形象地理解C# async await异步
    前言相信大家看过不少讲C#asyncawait的文章,博客园就能搜到很多,但还是有很多C#程序员不明白。如果搞不明白,其实也不影响使用。但有人就会疑惑,为什么要用异步?我感觉它更......
  • Redis lazy异步删除
    在学习数据异步或同步删除之前,你首先需要知道,删除操作实际上是包括了两步子操作。子操作一:将被淘汰的键值对从哈希表中去除,这里的哈希表既可能是设置了过期key的哈希表......
  • 异步请求函数return应不应该加await?
    阅读原文......
  • Learning JavaScript Async Await In Depth All In One
    LearningJavaScriptAsyncAwaitInDepthAllInOne深入学习AsyncAwaitconsturl=`https://cdn.xgqfrms.xyz/json/cats.json`;constgetJSON=async(url)......
  • ython爬取异步ajax数据
      使用selenium这个网页自动化测试工具,去获得源码。因为这个工具是等到页面加载完成采取获取的整个页面的代码,所以理论上是可以获得页面完整数据的。 defreque......
  • 安卓实现异步网络请求
    Android异步网络请求可以使用AsyncTask类来实现,AsyncTask是Android提供的一个用于处理异步任务的工具类,它使用三个泛型参数Params、Progress和Result来指定任务的输入、进......
  • C#异步方法中Task.WhenAll的使用
    一、说明Task.WhenAll()、Task.WhenAny()这两个与Task.WaitALL()、Task.WaitAny()是有区别的,When是异步的,Wait是同步的。Task.WhenAll():所有task完成时,task才完成,用于等待......