如何:将任务 <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()
,这将锁定调用线程并破坏使用异步的目的。
我有一个 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()
,这将锁定调用线程并破坏使用异步的目的。