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 @ 2024-12-09 22:10  小码哥-风云  阅读(4)  评论(0编辑  收藏  举报