[英]How to get async value from string method
我正在使用 API 形式的async
方法和我的代码如下,
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()
是一个 web 方法
你应该做这样的事情:
public async Task<string> Test(string token, int tenantId, string fromDate,string searchText)
{
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();
return result;
}
我强烈建议您避免使用 asmx 来执行异步函数,因为它已被弃用和停用。 为了更清楚地说明,我应该说 async/await 模式在较低版本的 .net 框架中有一些开销。 您可以使用至少 Wcf 个基于 do.net-core 或最新版本的 .NetFramework 的服务,如 4.6+。 另一种选择是将 Rest Apis 与基于 As.net 或 As.netCore 的异步/等待承诺结合使用。 但是,如果您选择继续当前的解决方案,您可以在此处查看检查 asmx WebMethods 的异步执行: https://learn.microsoft.com/en-us/previous-versions/do.net/articles/aa480516(v=msdn .10)?redirectedfrom=MSDN
如果你想同时使用 AsyncCallBack 和 async/await 模式,你可以这样做:
public IAsyncResult BeginGetvalue(AsyncCallback cb, Object state)
{
Action action = async () => {
string result = await GetValue();
};
return action.BeginInvoke(cb, state);
}
我要再次注意:请不要自己这样做。 ASMX 已弃用解决方案:(使用这些技术来处理您的解决方案:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.