一个简单的 ValueTask 的示例
Task 确实有潜在的缺点,特别是对于实例创建很多 并且高吞吐量和性能是关键问题的场景 : Task 是一个类。作为一个类,这意味着任何需要创建一个对象的操作都需要分配一个对象,分配的对象越多,垃圾收集器(GC)需要做的工作就越多,我们花在它上面的资源就越多可以花在做其他事情上。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace ValueTaskSample
{
class Program
{
static async Task Main(string[] args)
{
for (int i = ; i < ; i++)
{
IEnumerable<string> data = await GetSomeDataAsync();
await Task.Delay();
}
Console.ReadLine();
} private static DateTime _retrieved;
private static IEnumerable<string> _cachedData;
public static async ValueTask<IEnumerable<string>> GetSomeDataAsync()
{
if (_retrieved >= DateTime.Now.AddSeconds(-))
{
Console.WriteLine("{0} : data from the cache", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
return await new ValueTask<IEnumerable<string>>(_cachedData);
} Console.WriteLine("{0} : data from the service.", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
(_cachedData, _retrieved) = await GetTheRealData();
return _cachedData;
} public static Task<(IEnumerable<string> data, DateTime retrievedTime)> GetTheRealData() =>
Task.FromResult(
(Enumerable.Range(, )
.Select(x => $"item {x}").AsEnumerable(),
DateTime.Now));
}
}

参考:https://devblogs.microsoft.com/dotnet/understanding-the-whys-whats-and-whens-of-valuetask/
一个简单的 ValueTask 的示例的更多相关文章
- 一个简单的JSP程序示例
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...
- 使用TensorFlow v2张量的一个简单的“hello world”示例
使用TensorFlow v2张量的一个简单的"hello world"示例 import tensorflow as tf # 创建一个张量 hello = tf.constan ...
- 一个简单的Java死锁示例(转)
在实际编程中,要尽量避免出现死锁的情况,但是让你故意写一个死锁的程序时似乎也不太简单(有公司会出这样的面试题),以下是一个简单的死锁例子,程序说明都写着类的注释里了,有点罗嗦,但是应该也还是表述清楚了 ...
- 一个简单的Javascript闭包示例
//=====用闭包实现函数的Curry化===== //数字求和函数的函数生成器 function addGenerator( num ){ //返回一个简单的匿名函数,求两个数的和,其中第一个数字 ...
- 一个简单IOC与DI示例
1.通过bean工厂实现读取xml文件,并实例化对象,实现自动注入. package com.pri.test; import com.pri.factory.BeanFactory; import ...
- [deviceone开发]-一个简单的表单示例
一.简介 这个例子我们用do_ScrollView+do_LinearLayout来实现,当没有输入相关的值而去保存的时候,则把隐藏的几个提示Label显示出来,然后调用do_LinearLayout ...
- 从一个简单的Java单例示例谈谈并发
一个简单的单例示例 单例模式可能是大家经常接触和使用的一个设计模式,你可能会这么写 public class UnsafeLazyInitiallization { private static Un ...
- 从一个简单的Java单例示例谈谈并发 JMM JUC
原文: http://www.open-open.com/lib/view/open1462871898428.html 一个简单的单例示例 单例模式可能是大家经常接触和使用的一个设计模式,你可能会这 ...
- 简单的Spring Batch示例
使用Spring Batch做为批处理框架,可以完成常规的数据量不是特别大的离线计算. 现在写一个简单的入门版示例. 这里默认大家已经掌握了Spring Batch的基本知识,示例只是为了快速上手实践 ...
随机推荐
- Jenkins连接Git仓库时候报错Permission denied, please try again.
一.连接GIT仓库报错 Failed to connect to repository : Command : stdout: stderr: Permission denied, please tr ...
- Qt 之 qwt 和 qwtpolar 的编译配置
1 Qwt Qwt 全称为 Qt Widgets for Technical Applications,用于专业技术领域的可视化显示,如下所示: 左图为二阶系统的频率响应:中图为德国小城 Fried ...
- 【洛谷P3749】[六省联考2017]寿司餐厅(网络流)
洛谷 题意: 给出\(n\)份寿司,现可以选取任意多次连续区间内的寿司,对于区间\([l,r]\),那么贡献为\(\sum_{i=l}^r \sum_{j=i}^rd_{i,j}\)(对于相同的\(d ...
- docker学习12-docker快速搭建禅道环境
前言 bug管理系统是每个公司测试团队必备的,当去一个新的公司组建一个测试团队的时候,需快读搭建一套bug管理系统,使用docker搭建禅道就非常方便. 拉取镜像 先拉取zentao镜像,镜像地址ht ...
- BeanShell实现加密解密功能
一,在IDEA中写好加密的脚本 二,然后将整个包文件导出,生成jar包 三,将jar包文件放到jmeter的lib/ext目录下 然后在jmeter的BeanShell中引入该类,调用其中的加密方法 ...
- Linux 找文件
最简单的可以使用 find find . -name "libxxx.so" 还可以使用 locate libxxx.so
- 洛谷 P1823 [COI2007] Patrik 音乐会的等待
洛谷 P1823 [COI2007] Patrik 音乐会的等待 洛谷传送门 题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A ...
- LG5338/BZOJ5509/LOJ3105 「TJOI2019」甲苯先生的滚榜 Treap
问题描述 LG5338 LOJ3105 BZOJ5509 题解 建立一棵\(\mathrm{Treap}\),把原来的\(val\)换成两个值\(ac,tim\) 原来的比较\(val_a<va ...
- window.open()与window.showModuleDialog()
一.window.showModalDialog() 模态对话框. (只支持IE浏览器)window.showModelessDialog() 非模态对话框. 基本语法:vReturnVa ...
- Identity入门1:Claims、ClaimsIdentity、ClaimsPrincipal详解【转】
在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OWIN的 ...