为了账号安全,请及时绑定邮箱和手机立即绑定

异步函数的不同运行时间

异步函数的不同运行时间

C#
幕布斯7119047 2022-01-16 14:31:52
异步函数foo被调用 4 次,每次我们用.Result等待结果。using System;using System.Threading.Tasks;using System.Diagnostics;public class Program{    public static void Main(string[] args)    {        Stopwatch sm = new Stopwatch();        sm.Start();        var result1 = foo().Result;        sm.Stop();        Console.WriteLine("duration 1 : " + sm.Elapsed.ToString());        sm.Reset();        sm.Start();        var result2 = foo().Result;        sm.Stop();        Console.WriteLine("duration 2 : " + sm.Elapsed.ToString());        sm.Reset();        sm.Start();        var result3 = foo().Result;        sm.Stop();        Console.WriteLine("duration 3 : " + sm.Elapsed.ToString());        sm.Reset();        sm.Start();        var result4 = foo().Result;        sm.Stop();        Console.WriteLine("duration 4 : " + sm.Elapsed.ToString());    }    public static async Task<int> foo()    {        await Task.Run(() =>        {            var x = 0;            for (int i = 0; i < 100; i++)            {                x++;            }        });        return 42;    }}第一次通话比其他通话花费更多时间,例如:持续时间 1:00:00:00.0016609持续时间 2:00:00:00.0001197持续时间 3 : 00:00:00.0001045持续时间 4 : 00:00:00.0000632在最后一次调用之后调用另一个异步函数(例如与 foo 具有相同主体的函数 bar)将比第四次调用 foo 花费更多的时间。是什么原因?
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

正如评论中提到的,当您第一次调用foo它时,它由即时编译器编译为本机代码,其他调用执行预编译的代码,这就是它们工作得更快的原因。


查看完整回答
反对 回复 2022-01-16
  • 1 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信