您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
40 行
1.1 KiB
40 行
1.1 KiB
using System;
|
|
using System.Collections.Concurrent;
|
|
|
|
namespace VRMShaders
|
|
{
|
|
internal sealed class TinyManagedTaskScheduler
|
|
{
|
|
private readonly ConcurrentQueue<(Action, Func<bool>)> _continuationQueue =
|
|
new ConcurrentQueue<(Action, Func<bool>)>();
|
|
private readonly ConcurrentQueue<(Action, Func<bool>)> _temporaryQueue =
|
|
new ConcurrentQueue<(Action, Func<bool>)>();
|
|
|
|
public void ManagedUpdate()
|
|
{
|
|
while (_continuationQueue.TryDequeue(out var tuple))
|
|
{
|
|
var (continuation, canExecute) = tuple;
|
|
|
|
if (canExecute())
|
|
{
|
|
continuation();
|
|
}
|
|
else
|
|
{
|
|
_temporaryQueue.Enqueue(tuple);
|
|
}
|
|
}
|
|
|
|
while (_temporaryQueue.TryDequeue(out var tuple))
|
|
{
|
|
_continuationQueue.Enqueue(tuple);
|
|
}
|
|
}
|
|
|
|
public void Enqueue(Action continuation, Func<bool> canExecute)
|
|
{
|
|
_continuationQueue.Enqueue((continuation, canExecute));
|
|
}
|
|
}
|
|
}
|