Closed 0611163 closed 8 months ago
public void Expire() { if (!CompareAndSetState(ST_INIT, ST_EXPIRED)) { return; } Task.Run(() => { _task.Run(this); }); }
为什么这里_task.Run(this);要使用Task.Run包裹?这样如果有大量的HashedWheelTimer类的Delay方法调用,CPU占用会比较高。我的测试CPU占用高达30%,如果去掉Task.Run包裹,CPU占用会降低到5%左右。但我不知道去掉Task.Run包裹会有什么问题?
明白了,如果不包裹Task.Run,使用它的程序也没有调用Task.Run,那么线程池中线程的数量不会增长,导致执行大量任务时效率低下。
为什么这里_task.Run(this);要使用Task.Run包裹?这样如果有大量的HashedWheelTimer类的Delay方法调用,CPU占用会比较高。我的测试CPU占用高达30%,如果去掉Task.Run包裹,CPU占用会降低到5%左右。但我不知道去掉Task.Run包裹会有什么问题?