public async Task <IPositionedMessagesParser> CreateParser(CreateParserParams parserParams) { parserParams.EnsureRangeIsSet(this); var strategiesCache = new StreamParser.StrategiesCache() { MultiThreadedStrategy = multiThreadedStrategy, SingleThreadedStrategy = singleThreadedStrategy }; DejitteringParams?dejitteringParams = GetDejitteringParams(); if (dejitteringParams != null && (parserParams.Flags & MessagesParserFlag.DisableDejitter) == 0) { return(await DejitteringMessagesParser.Create( async underlyingParserParams => await StreamParser.Create( this, EnsureParserRangeDoesNotExceedReadersBoundaries(underlyingParserParams), textStreamPositioningParams, settingsAccessor, strategiesCache ), parserParams, dejitteringParams.Value )); } return(await StreamParser.Create( this, parserParams, textStreamPositioningParams, settingsAccessor, strategiesCache )); }
public static async Task <DejitteringMessagesParser> Create(Func <CreateParserParams, Task <IPositionedMessagesParser> > underlyingParserFactory, CreateParserParams originalParams, int jitterBufferSize) { if (underlyingParserFactory == null) { throw new ArgumentNullException("underlyingParserFactory"); } var parser = new DejitteringMessagesParser(originalParams, jitterBufferSize); try { await parser.CreateUnderlyingParserAndInitJitterBuffer(underlyingParserFactory); } catch { await parser.Dispose(); throw; } return(parser); }