C#
文章平均质量分 76
C#相关
晚安苏州
一场游戏一场梦
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Task 超时处理
我们只是延迟 5 秒来让 CancellationTokenSource 取消,虽然它被用到Task第二个参数里,且5秒后取消了,但是我们的工作耗时代码里用了。但是这样写会有一个问题,就是每次做超时都会写这段代码,可以考虑改为扩展方法。Task工作要支持被取消,首先是要在工作内容中使用支持取消的代码,例如。做了任务执行时间对比,如果工作任务晚于超时任务完成,即工作超时。只是管理取消任务的令牌,它本身是没有超时检测功能的。这种不支持取消的同步方法,是必须要等它执行完的。下面的代码,永远不会检测到超时。原创 2025-09-30 14:22:53 · 269 阅读 · 0 评论 -
Task用法
await 的对象是。原创 2025-09-30 11:18:22 · 212 阅读 · 0 评论 -
c# TaskScheduler
在MyTaskScheduler 中,我建了一个线程 executionThread,线程方法是一个while循环,一直在监听有没有新的Task过来,有多个Task过来,就按Task创建顺序执行,没有的话 while 就暂停在 waitany 处。一般情况下没什么大问题,但如果这3个中的每个Task都非常耗CPU或者内存,而计算机又需要预留资源去干别的事情,这就要让3个Task不能同时执行。答案就是:TaskScheduler,它可以让已经创建好的 Task 去按照特殊的顺序来执行。怎样达到这样的效果?原创 2024-12-13 16:03:54 · 667 阅读 · 0 评论 -
c# 协变与抗变
在具有可变性的条件下,与原始类型转换方向相同的可变性称作协变(covariant)。在具有可变性的条件下,与原始类型转换方向相反的可变性称作抗变(contravariant),也称逆变。可变性远远不只是针对映射到数组的能力,也有映射其它集合的能力如List.很多人会问,说了这么多,到底这个协变或者抗变有什么实际价值?为什么接口参数类型前加了个 out 关键字就可以安全转换了?因为在接口类型参数前加上修饰关键字 in 和 out 可以表示该类型参数支持抗变和协变,会在安全范围内进行转换。原创 2024-12-12 13:30:23 · 1269 阅读 · 0 评论 -
C# async await 和 Task.Run 区别
摘要:C#中的Task.Run和async/await是两种异步处理机制,前者通过多线程实现异步,后者基于状态机实现非阻塞。Task是工作单元抽象,可能但不必须使用线程。关键区别在于Task.Run适合CPU密集型任务(消耗线程资源),async/await适合I/O密集型任务(资源高效)。实际应用中,await后是否返回原线程取决于同步上下文(UI程序会返回,控制台程序不会)。最佳实践是CPU密集型用Task.Run,I/O密集型用async/await,避免不必要线程创建。两者可组合使用,但需注意Tas原创 2019-10-25 16:03:10 · 1139 阅读 · 0 评论 -
C# 异步编程 并行编程
目录异步编程1. Thread2. Task3.async + await并行编程Parallel本篇简单记录一下异步编程和并行编程,并以下图一个 Demo 来演示,源码地址我会公布在文章结尾。 异步编程 个人觉得,异步无非就是不影响某个线程的情况下,在另外的线程里执行任务的过程。异步编程即多线程编程。C# 里多线程编程写法有很多种,这里记录三种。...原创 2018-09-28 13:46:50 · 9618 阅读 · 2 评论 -
C#调用C++ DLL
记录一下两个内容:1.使用VS2015创建C++ DLL;2.使用C#调用上面创建好的C++ DLL;一.使用VS2015创建C++ DLL1.选择win32项目2.点击【下一步】->选择 dll 和预编译头3.随便添加一个头文件【MyTester.h】:并在stdafx.h文件中添加引用:随便输入一些简单定义代码,这里以 struct / int / bool / char /BYTE 类...原创 2018-06-13 11:18:28 · 8873 阅读 · 0 评论 -
C#调试C++ DLL代码
有些C#写的项目中会调用到C++ DLL,有时候需要调试进C++代码里去查问题,过程中经常会遇到无法命中C++代码断点的问题,在此记录一下常用的设置方式,照着设置的话基本上没什么问题:1)确保C#和C++项目源代码在同一个解决方案里 (这一点有待商榷,后来经过验证并不一定要在同一个解决方案里);2)确保C#项目,属性设置->调试选项->“支持非托管代码调试”打钩( 如果是...原创 2017-08-03 15:12:30 · 5413 阅读 · 1 评论 -
C++封装C#中的事件
背景: 用户要求我们提供给他们API,如果这些API都是用C#写的DLL,而用户要求API为C++的 DLL,这种情况下就需要将C# DLL里面的内容封装成C++ DLL。这里针对c#中的事件,记录一下如何使用C++来封装c#的事件:1.创建一个简单的C# DLL实例:a.新建一个c# DLL项目,取名:TestDotNetDLL,添加一个类:Customer,这原创 2016-08-09 11:40:44 · 6431 阅读 · 12 评论 -
C# 使用 Socket (Udp + Tcp)
一个简单示例,记录下C#中如何使用Socket:这个示例的作用是:服务端可以监测到是否和客户端连接,并且如果连上了,可以互相收发消息。如上图,我用的本机测试的,如果是不同机器且连着网,请换成对应的局域网ip或者公网映射ip.步骤:1.新增个空解决方案,并添加两个winform项目,一个是server端一个是client端:2.在服务端和客户端分别加入如下代码:服...原创 2015-06-29 17:35:38 · 5323 阅读 · 0 评论 -
C# 控制台程序 打开窗体
控制台项目Project1,程序代码,如:class Program{ private static Thread _thread; static void Main(string[] args) { _thread = new Thread(TestClass.Show); _thread.SetApartmentState(ApartmentState.STA);//设...原创 2020-01-17 17:33:32 · 3819 阅读 · 0 评论
分享