我相信我下面有比賽條件。我手動構建一個帶有JSON輸出的HttpResponseMessage
以異步流式傳輸。這個問題似乎與櫃檯(我)。我想在第一次寫入列表之後的任何元素之前添加逗號。異步/等待比賽條件
在列表的開頭,有時第一次寫入後的第一對記錄(我見過最多3個)不會有前面的逗號。數字不一致,有時按預期工作。我沒有在我的本地機器上看到它,但是在部署的環境中使用了更強大的硬件。
var LastUpdate = JsonConvert.SerializeObject(dt);
var pre = $"{{ \"LastUpdate\": {LastUpdate}, \"List\":[";
var post = "]}";
HttpResponseMessage response = Request.CreateResponse();
response.Content = new PushStreamContent(
async (stream, http, context) =>
{
try
{
int i = 0;
var buffer = Encoding.UTF8.GetBytes(pre);
await stream.WriteAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false);
var query = getQuery(id);
await query
.ForEachAsync(async entity =>
{
var student = MapRecord(entity);
if (student != null)
{
var json = JsonConvert.SerializeObject(student);
buffer = Encoding.UTF8.GetBytes(((i > 0) ? ", " : "") + json);
await stream.WriteAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false);
i++;
}
}, cancellationToken).ConfigureAwait(false);
buffer = Encoding.UTF8.GetBytes(post);
await stream.WriteAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false);
}
如何'ForEachAsync'聲明? –
@YuvalItzchakov也許OP使用[QueryableExtensions.ForEachAsync](https://msdn.microsoft.com/en-us/library/system.data.entity.queryableextensions.foreachasync(v = vs.113).aspx) – juharr