如何将Task <jarray>转换为JArray

时间:2018-05-23 18:18:15

标签: c# async-await

我正在尝试从控制台应用程序调用异步方法。该方法将Task返回给Main方法。当我尝试查询FirstOrDefault时,我得到“任务不包含FirstOrDefault的定义”。我试图将结果转换为(JArray),但它说,“无法将类型System.Tasks.Task转换为Newtonsoft.Json.Linq.JArray

static async  void  Main(){
     var result = Task.Run(() => MakeClientRequest());
     string employeeId = result
      .FirstOrDefault(x => x.Value<string>("employeeSequence") == "284")?
      .Value<string>("id");
}

static async Task<JArray> MakeClientRequest()
{
....
....
JArray data = JArray.Parse(jsonString);
    return data;
}

1 个答案:

答案 0 :(得分:-1)

只需await结果:

static async void Main()
{
     var result = await MakeClientRequest();
     string employeeId = result
      .FirstOrDefault(x => x.Value<string>("employeeSequence") == "284")?
      .Value<string>("id");
}

没有任何理由在这里启动Task以获得结果,至少不是我在OP发布的代码中看到的。

如果你真的由于某种原因不想在这里使用await,你可以等待任务完成:

var result = MakeClientRequest().GetAwaiter().GetResult();

但实际上,这与编译器在编写var result = await ...时生成的内容相同。