Ваш лучший вариант, как я вижу, это использовать TPL Dataflow
's ActionBlock
:
var actionBlock = new ActionBlock(address =>
{
if (!IsDuplicate(address))
{
LocateAddress(address);
}
});
actionBlock.Post(context.Request.UserHostAddress);
TPL Dataflow
надежный, потокобезопасный, async
- уже и очень настраиваемая структура, основанная на актерах (доступна как nuget)
Вот простой пример для более сложного случая. Предположим, вы хотите:
LocateAddress
и вставка очереди async
.
var actionBlock = new ActionBlock(async address =>
{
if (!IsDuplicate(address))
{
await LocateAddressAsync(address);
}
}, new ExecutionDataflowBlockOptions
{
BoundedCapacity = 10000,
MaxDegreeOfParallelism = Environment.ProcessorCount,
CancellationToken = new CancellationTokenSource(TimeSpan.FromHours(1)).Token
});
await actionBlock.SendAsync(context.Request.UserHostAddress);
Хорошо, очевидно, это было срабатывание, только то, что включение mobx-devtools делало вывод на печать в под-иерархии некоторого вывода, связанного с dev-tool