-JsonTextReader new line async performance (#1172)

This commit is contained in:
James Newton-King
2017-01-15 09:45:24 +13:00
committed by GitHub
parent dcae8e220d
commit 1513b11d73
2 changed files with 26 additions and 10 deletions
+15 -4
View File
@@ -490,16 +490,27 @@ namespace Newtonsoft.Json
}
}
private async Task ProcessCarriageReturnAsync(bool append, CancellationToken cancellationToken)
private Task ProcessCarriageReturnAsync(bool append, CancellationToken cancellationToken)
{
_charPos++;
if (await EnsureCharsAsync(1, append, cancellationToken).ConfigureAwait(false) && _chars[_charPos] == StringUtils.LineFeed)
Task<bool> task = EnsureCharsAsync(1, append, cancellationToken);
switch (task.Status)
{
_charPos++;
case TaskStatus.RanToCompletion:
SetNewLine(task.Result);
return AsyncUtils.CompletedTask;
case TaskStatus.Canceled:
case TaskStatus.Faulted:
return task;
}
OnNewLine(_charPos);
return ProcessCarriageReturnAsync(task);
}
private async Task ProcessCarriageReturnAsync(Task<bool> task)
{
SetNewLine(await task.ConfigureAwait(false));
}
private async Task<char> ParseUnicodeAsync(CancellationToken cancellationToken)
+11 -6
View File
@@ -120,6 +120,16 @@ namespace Newtonsoft.Json
}
}
private void SetNewLine(bool hasNextChar)
{
if (hasNextChar && _chars[_charPos] == StringUtils.LineFeed)
{
_charPos++;
}
OnNewLine(_charPos);
}
private void OnNewLine(int pos)
{
_lineNumber++;
@@ -1719,12 +1729,7 @@ namespace Newtonsoft.Json
{
_charPos++;
if (EnsureChars(1, append) && _chars[_charPos] == StringUtils.LineFeed)
{
_charPos++;
}
OnNewLine(_charPos);
SetNewLine(EnsureChars(1, append));
}
private void EatWhitespace()