指定Task任务顺序执行
经常听到说线程池这个东西,凭印象写了个这么简单的例子。
CusTRun方法要不要await,取决于要不要作为后台任务。
任务可指定数量,线程参数可共享全,顺序可控,可继续改进。
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks; namespace ConsoleApp1
{
internal class Program
{
static AsyncLocal<int> asyncObj = new AsyncLocal<int>();
static async Task Main(string[] args)
{
await CusTRun(100, async () =>
{
//TODO:业务代码
await Task.Delay(1000);
Console.WriteLine(asyncObj.Value);
Console.WriteLine("ManagedThreadId=" + Thread.CurrentThread.ManagedThreadId);
}, default);
Console.WriteLine("Hello World!");
Console.ReadKey();
} static async Task CusTRun(int count, Func<Task> func, CancellationToken cancellationToken)
{
ConcurrentDictionary<int, Task> taskDic = new ConcurrentDictionary<int, Task>();
for (int i = 0; i < count; i++)
{
asyncObj.Value = i;
if (taskDic.Values.Count(t => t.Status != TaskStatus.RanToCompletion) >= 5)
{
taskDic = (ConcurrentDictionary<int, Task>)(taskDic.OrderBy(x => x.Key));
Task.WaitAny(taskDic.Values.ToArray());
taskDic.Values.Where(t => t.Status != TaskStatus.RanToCompletion).ToList();
}
else
{
taskDic.TryAdd(i, Task.Run(func, cancellationToken));
}
await Task.Delay(1000);
}
}
}
}
指定Task任务顺序执行的更多相关文章
- C# 不使用Task实现的多线程顺序执行
多线程有很好的并发性即无序性,在某些特殊情况下需要用到多线程然而又要使其具备顺序性,这种时候就有了一个特殊的场景那就是多线程顺序执行,在现在VS2015中Task自带了顺序执行的方法,但在此之前的旧项 ...
- promise实现图片按照指定的加载顺序执行
promise实现图片按照指定的加载顺序执行,先加载第二张,再加载第一张,最后加载第三张 <!DOCTYPE html> <html lang="en"> ...
- Java之指定Junit测试方法的执行顺序举例
问题描述: 大家都知道使用JUnit进行测试的时候,方法的执行顺序不是按照编写的先后顺序执行的,那么如何控制Junit的执行顺序呢? 解决方法: 在测试类上加 @FixMethodOrder 注解即可 ...
- 【原创】cs+html+js+css模式(七): 顺序执行与并发执行问题,IIS7及其以上版本的抛错问题解决
在进行开发的过程中,针对于这种模式,我们继承的IRequiresSessionState,这种对于我们的同一个IIS的执行中是顺序执行即一个ajax请求处理完成后,才能执行下一个ajax, ...
- gulp顺序执行任务
gulp的任务的执行是异步的. 所以,当我写完一系列的任务,准备一股脑地执行. # gulp.task('prod', ['clean', 'compass', 'image', 'style', ' ...
- C#之使用AutoResetEvent实现线程的顺序执行
前几天一朋友问我如何实现线程的顺序执行,说真的,虽然看过CLR这本书,也把线程部分拜读了两遍,但是这个问题出来之后还是没有一个思路.今天在搜索资料的时候无意中再次看到AutoResetEvent这个东 ...
- 多命令顺序执行,dd命令,管道|,grep,通配符,其他特殊符号
多命令顺序执行:命令1;命令2 命令之间没有逻辑关系 命令1&&命令2 命令1执行正确才执行命令2,命令1执行错误不会执行命令2 命令1||命令2 命令执行错误才执行命令2,命令1执行 ...
- python顺序执行多个py文件
python顺序执行多个py文件 假如我要执行code目录下的python程序,假设该目录下有1.py,2.py,3.py,4.py四个文件,但是我想执行1.py,2.py,4.py,则可在该目录下创 ...
- [Shell]Bash基本功能:多命令顺序执行与管道符
/*----------------------------------------------------------------------------------------------- @黑 ...
- silverlight——多次异步调用的顺序执行
遇到这样一个功能需求,对于后台的同一个服务调用多次,但要求传入的参数能够再一个执行完之后再进行另一个参数的执行. 由于silverlight支持的是异步调用机制,故无法控制服务调用何时返回.那么如果使 ...
随机推荐
- mysql数据库锁MDL锁的解释
1.背景 在我们系统中有一张表它的查询概率非常高.最近有个需求,需要对这个表增加一个字段,然而在增加字段的时候发现系统中有多个业务出现了超时操作,那么这个是什么原因导致的呢?经过查阅资料发现是数据库的 ...
- 使用vott对车牌位置进行标注
1.软件安装 vott 下载地址 https://github.com/microsoft/VoTT/releases 双击vott-2.2.0-win32.exe安装标注软件,安装成功后桌面会生成应 ...
- DARTS:基于梯度下降的经典网络搜索方法,开启端到端的网络搜索 | ICLR 2019
DARTS是很经典的NAS方法,它的出现打破了以往的离散的网络搜索模式,能够进行end-to-end的网络搜索.由于DARTS是基于梯度进行网络更新的,所以更新的方向比较准确,搜索时间相当于之前的方法 ...
- 携手HMS Core统一扫码服务, 兴业证券优理宝App提升用户扫码体验
兴业证券优理宝App联合华为HMS Core,集成HMS Core统一扫码服务,在提升扫码成功率的同时,还支持C端用户用手机端APP扫描手表端二维码,实现行情在手机与手表间跨终端流转,行情信息,抬腕可 ...
- 用HarmonyOS做一个可以手势控制的电子相册应用(ArkTS)
介绍 本篇 Codelab 介绍了如何实现一个简单的电子相册应用,主要功能包括: 1. 实现首页顶部的轮播效果. 2. 实现页面多种布局方式. 3. 实现通过手势控制图片的放大.缩小.左右滑动查 ...
- HarmonyOS远端状态订阅开发实例
IPC/RPC提供对远端Stub对象状态的订阅机制, 在远端Stub对象消亡时,可触发消亡通知告诉本地Proxy对象.这种状态通知订阅需要调用特定接口完成,当不再需要订阅时也需要调用特定接口取消.使 ...
- Blocks(单调栈)
题干中说每次选择一个大于k的数,还要选他左右两个数其中之一加上一,最后问你最长的每个数不小于K的子序列. 这些都是障眼法,其实就是问你最长的平均值大于或等于K的最长子序列,这样就明朗了. 接下来就是找 ...
- docker containerd runc containerd-shim等组件的关系
早期 kubelet 创建容器工作原理 因为 docker 出生的比 k8s 早,所以 k8s 早期的容器运行时都是基于 docker 的,kubelet 通过 docker 的 api 创建容器.后 ...
- vue+scss混合(mixins)使用(css代码的vuex(公共管理))
scss混合(mixins)使用 例一.使用混合mixins中的变量来定义一个n行文本溢出隐藏的公用样式. 1.创建mixins.scss文件 //文本n行溢出隐藏 @mixin ellipsisBa ...
- Oracle的主键id自增
Oracle的主键id自增 可以直接用序列加触发器的方式实现 首先表里面要有个主键,没有的话用语句或者在编译器中加一下,都可以 然后创建一个序列,一般来说最常用的有这几个参数 CREATE SEQUE ...