【发布时间】:2021-01-12 22:21:09
【问题描述】:
我正在使用async 方法的API,我的代码如下,
public async void Test(string token, int tenantId, string fromDate,string searchText)
{
try
{
string serviceUrl = "http://localhost/Testapi/api/details/requestDetails/Details";
string jsonParamterData = new JavaScriptSerializer().Serialize(new
{
FromDate = fromDate,
SearchText = searchText,
});
HttpClient client = new HttpClient();
HttpMethod method = new HttpMethod("POST");
HttpRequestMessage message = new HttpRequestMessage(method, serviceUrl);
StringContent content = new StringContent(jsonParamterData, Encoding.UTF8, "application/json");
client.DefaultRequestHeaders.Add("TenantId", tenantId.ToString());
client.DefaultRequestHeaders.Add("Authorization", string.Format("bearer {0}", token));
message.Content = content;
var response = await client.PostAsync(serviceUrl, content);
var result = await response.Content.ReadAsStringAsync();
client.Dispose();
}
}
我需要从其他方法获取响应结果。
public string GetValue(){
}
但是Test() 方法是无效的,那么如何从另一个方法访问Test() 结果值呢?是否可以在 async 方法中返回值。
更新:
[WebMethod(EnableSession = true)]
public string GetValue(){
}
但GetValue() 是一种网络方法
【问题讨论】:
-
您的
Test方法应该返回Task<string>而不是 void。async void只能用于异步事件处理程序。 -
@DavidL 那我怎样才能访问那个方法,你能给我一些完整的代码吗
-
用
using块处理IDisposables,包括client和response -
正如 DavidL 已经说过的,avoid async void。我重复它只是为了发布解释原因的链接。
-
@TheodorZoulias 那么我如何在 Web 方法中使用这些方法。或者有任何可能改变我的
Test()方法
标签: c# asynchronous async-await