c# - 触发并忘记的任务与后台无限任务
问题描述
我正在考虑这两个选项。如果每秒调用多次 Task.Run() 性能不佳,我不反对,而是使用带有信号量的无限线程
1 - 开火并忘记
...
Task.Run(async () =>
{
//Do();
});
2 - 后台无限任务
我简化了代码,但想法是这样的,一个线程正在等待处理信号
开始线程
ctor()
{
_thread = new Thread(WriteLog);
_thread.Start();
}
入队和释放信号量
public long AddLog(Log aLog)
{
_buffer.Enqueue(aLog);
_sm.Release();
}
每次 _sm 发布时处理
private void WriteLog()
{
while (true)
{
try
{
// Wait release to write log
_sm.Wait(Timeout.Infinite);
var xBuffer = _buffer.Dequeue()
// Do()
}
catch
{
}
}
解决方案
推荐阅读
- java - Maven 构建后 getResource() 的问题
- node.js - 使用不同用户的Mongoose查询数据时如何显示Multer上传的图像
- angular - 在订阅中访问服务变量作为组件变量 Angular7/NGRX
- mocha.js - 详细报告 Cypress/Mochawesome
- sql - 来自 SELECT 参考的子查询,给我一个“不能从这部分查询中引用”
- reactjs - 显示来自同一个 reducer 的 2 个不同状态,而状态不会重写
- sql-server - SQL Server 探查器跟踪未显示参数值
- node.js - Elastic beanstalk 请求上的 Node.js 是 HTTPS,但 express 是作为 HTTP 服务的。这安全吗?
- android - 在约束布局的第二个视图上出现错误“重复属性”
- java - Files.lines 的高内存使用率