c#从异步函数返回数据
发布时间:2020-12-15 23:32:28 所属栏目:百科 来源:网络整理
导读:我有两种方法 public void GetEmp(){ HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new System.Uri("http://sdw2629/empservice/EmployeeInfo.svc/Employee")); request.Method = "GET"; request.ContentType = "application/json; char
我有两种方法
public void GetEmp() { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new System.Uri("http://sdw2629/empservice/EmployeeInfo.svc/Employee")); request.Method = "GET"; request.ContentType = "application/json; charset=utf-8"; request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback),request); } 和 private void ReadWebRequestCallback(IAsyncResult callbackResult) { HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState; using (HttpWebResponse myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult)) { using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream())) { string results = httpwebStreamReader.ReadToEnd(); //execute UI stuff on UI thread. } } } 在这里,我想返回一个字符串“results”到这样的其他方法 string data= obj1.GetEmp() 我怎样才能实现这一目标..任何帮助都会得到满足……谢谢 解决方法
最简单的方法是使用async重写方法,如下所示:
public async Task<string> GetEmpAsync() { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new System.Uri("http://sdw2629/empservice/EmployeeInfo.svc/Employee")); request.Method = "GET"; request.ContentType = "application/json; charset=utf-8"; var response = await request.GetResponseAsync(); using (StreamReader httpwebStreamReader = new StreamReader(response.GetResponseStream())) { string results = await httpwebStreamReader.ReadToEndAsync(); //execute UI stuff on UI thread. return results; } } 然后你可以得到这样的代码结果: var results = await GetEmpAsync(); 如果您使用的是旧版本并且没有异步,则可以通过阻止方式获取结果: public string GetEmpBlocking() { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new System.Uri("http://sdw2629/empservice/EmployeeInfo.svc/Employee")); request.Method = "GET"; request.ContentType = "application/json; charset=utf-8"; var response = request.GetResponse(); using (StreamReader httpwebStreamReader = new StreamReader(response.GetResponseStream())) { string results = httpwebStreamReader.ReadToEnd(); //execute UI stuff on UI thread. return results; } } 得到这样的结果: var results = GetResultBlocking(); Р.S.您还可以考虑在早期版本中使用Microsoft.Bcl.Async来支持异步. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |