using System; using System.Threading.Tasks; #pragma warning disable 1998 namespace Nethereum.BlockchainProcessing.Processor { public abstract class ProcessorBaseHandler : IProcessorHandler { public Func> Criteria { get; protected set; } protected ProcessorBaseHandler() { } protected ProcessorBaseHandler(Func> criteria) { SetMatchCriteria(criteria); } protected ProcessorBaseHandler(Func criteria) { SetMatchCriteria(criteria); } public void SetMatchCriteria(Func criteria) { if(criteria == null) return; Func> asyncCriteria = async (t) => criteria(t); SetMatchCriteria(asyncCriteria); } public void SetMatchCriteria(Func> criteria) { Criteria = criteria; } public virtual async Task IsMatchAsync(T value) { if (Criteria == null) return true; return await Criteria(value).ConfigureAwait(false); } public virtual async Task ExecuteAsync(T value) { if (await IsMatchAsync(value).ConfigureAwait(false)) { await ExecuteInternalAsync(value).ConfigureAwait(false); } } protected abstract Task ExecuteInternalAsync(T value); } }