首页 > 解决方案 > 触发并忘记的任务与后台无限任务

问题描述

我正在考虑这两个选项。如果每秒调用多次 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
          {
          }
      }

标签: c#multithreadingtasksemaphore

解决方案


推荐阅读