C# ValueTask使用

1. ValueTask使用,分配在栈上与Span一样

复制代码

复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace WinFormsApp2
 8 {
 9     public class MyServer
10     {
11 
12         private readonly Dictionary<int, string> _cache;
13 
14         public MyServer() { 
15            _cache = new(){ [42]= "hello" };          
16         }
17 
18 
19 
20         /// <summary>
21         /// 除非此处命中率非常高,不然用这个ValueTask没有太大的意义,反而会增额外的开销
22         /// </summary>
23         /// <param name="key"></param>
24         /// <returns></returns>
25         public async ValueTask<string> GetResultAsync(int key)
26         {
27             if (_cache.TryGetValue(key, out var value))
28                 return value;
29             //以上代码是在同步完成,所以开销最小,是在Stack上操作
30             //如果是异步上执行开销比普通Task还要大一些
31             await Task.Delay(1000);
32             return key.ToString();
33         }
34     }
35 }
复制代码

 

 
复制代码

调用:

复制代码
1  private async void button3_Click(object sender, EventArgs e)
2  {
3      var myserver=new MyServer();
4      var r= await myserver.GetResultAsync(42);
5      Debug.WriteLine(r);
6  }

//可以转换成普通Task
Task.AsTask();
复制代码

 

posted @   小码哥-风云  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示