Async Json.net反序列化

Vit*_*nko 3 c# json asynchronous json.net windows-phone-7

正如这里提到的(很棒的博客,顺便说一下),为了正确处理CPU绑定的调用,需要正确的异步调用.例如,不是

    await Task.Run(() => Thread.Sleep(100));
Run Code Online (Sandbox Code Playgroud)

    await Task.Delay(100);
Run Code Online (Sandbox Code Playgroud)

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

    await TaskEx.Run(() => JsonConvert.DeserializeObject<PocoProduct>(resultString));
Run Code Online (Sandbox Code Playgroud)

使用环境:

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;
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

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

解析JSON本质上是CPU绑定操作; 你能做的最好的事情就是将这项工作转移到另一个线程.