如何:将任务 <MyBoolResult> 转换为 MyBook 结果 class 对象

HOWTO: Convert Task<MyBoolResult> into MyBoolResult class object

我有一个 ASP.NET MVC 应用程序,它正在调用 WEB API REST 服务方法。

我正在使用自定义 MyBoolResult 对象 return 是否操作成功。这是一个带有一些构造函数和属性的 class。

现在我正尝试在 DoWork 方法中将 Task 转换为 MyBoolResult。我怎样才能做到这一点?

代码段下方:

public MyBoolResult DoWork()
{
        string requestUri = "api/MyController/CreateFile";
        CustomObject myParams = new CustomObject();

        // Below line does not work. How can I convert the returned object into MyBoolResult?
        MyBoolResult myBoolObject = this.CreateFile(requestUri, myParams);

        return myBoolObject;
}

public async Task<MyBoolResult> CreateFile(string requestUri)
{
     // Here some stuff and initializations
     // To simplify I am not putting here all the code previous to PostAsync

     HttpResponseMessage res = await client.PostAsync(requestUri, httpContent);
     if (res.IsSuccessStatusCode)
     {
         var webApiResp = res.Content.ReadAsStringAsync().Result;
         result = Newtonsoft.Json.JsonConvert.DeserializeObject<MyBoolResult>(webApiResp);
     }
     else
     {
         result = MyBoolResult.ToErrorResult(String.Format("An error occurred! HTTP error code {0}", res.StatusCode));
     }

     return result;
}
MyBoolResult myBoolObject = await this.CreateFile(requestUri, myParams);

DoWork 需要改为异步。或者,您可以在 createfile 调用中使用 .Result,但我不建议这样做以解决潜在的死锁问题。

DoWork 也需要异步。否则执行将跳过该代码。异步有点像这样传染。

public async Task<MyBoolResult> DoWork()
{
    string requestUri = "api/MyController/CreateFile";
    CustomObject myParams = new CustomObject();

    // Below line does not work. How can I convert the returned object into 
    MyBoolResult?
    MyBoolResult myBoolObject = await this.CreateFile(requestUri, myParams);

    return myBoolObject;
}

Task 确实有结果 属性,但您需要调用 Task.Wait(),这将锁定调用线程并破坏使用异步的目的。