4

正如这里提到的(伟大的博客,顺便说一句),为了正确工作 CPU 绑定调用,需要适当的异步调用。例如,不

    await Task.Run(() => Thread.Sleep(100));

    await Task.Delay(100);

Json.net 反序列化是否有类似物?

    await TaskEx.Run(() => JsonConvert.DeserializeObject<PocoProduct>(resultString));

使用环境:

async public Task<ProductsAnswer> RequestServerAsync()
{
    // Just a wrapper for await httpWebRequest.GetResponseAsync() and await postStreamReader.ReadToEndAsync()
    var resultString = await new NetworkManager().GetAsync(Constants.SERVER_REQUEST); 

    // await TaskEx.Run(() => JsonConvert.DeserializeObject<PocoProduct>(resultString));
    var answer = await ParseProductsFromString(resultString); 

    return answer;
}
4

1 回答 1

5

该博客文章的重点是避免阻塞对不受 CPU 限制的操作的调用,例如延迟或磁盘/网络 IO。

解析 JSON 本质上是 CPU 密集型操作;你能做的最好的就是把这项工作转移到另一个线程。

于 2013-11-11T17:33:04.300 回答