HttpWebResponse是否需要yield / coroutine来等待来自服务器的消息?

时间:2016-07-06 19:59:01

标签: c# unity3d httpwebrequest

您好我正在尝试实施“PUT”请求将JSON字符串发送到我的服务器,下面是我的代码

public static string PUT (string url, string jsonStr){
    string msg = "";

    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    httpWebRequest.ContentType = "application/json";
    httpWebRequest.Method = "PUT";
    ServicePointManager.Expect100Continue = false;

    using (StreamWriter sw = new StreamWriter(httpWebRequest.GetRequestStream())){
        sw.Write(jsonStr);
        sw.Flush();
        sw.Close();
    }

    try{
        HttpWebResponse response = httpWebRequest.GetResponse() as HttpWebResponse;
        using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
        {
            msg = streamReader.ReadToEnd();
        }
    }catch(WebException ex){
        msg = ex.Message;
    }

    return msg;
}

现在我可以从我的服务器收到msg,比如“成功!”这很短。但我想知道这个方法是否应该写成协程,并且喜欢“yield return response”或“yield return streamReader.EndofStream()”以确保在从服务器获取所有消息后读取响应。

我正在使用具有自己的Web请求方法的Unity3D - “UnityWebRequest”,它需要“yield return unityWebRequest.send()”等待请求完成。这就是为什么我认为也许HttpWebRequest也需要它。

1 个答案:

答案 0 :(得分:3)

  

HttpWebResponse是否需要yield / coroutine来等待来自的消息   服务器

  

但是我想知道这个方法是否应该写成协程并且可以   喜欢"收益率回报"或者"收益率   streamReader.EndofStream()"毕竟确保阅读回复   消息来自服务器。

您可以使用与WWWUnityWebRequest相关的协同程序/ yiled。您可以了解有关UnityWebRequest here的更多信息。

对于HttpWebResponse,您必须在另一个Thread中使用它或使用它的异步版本。 Here就是一个例子。如果你不这样做,那么大多数时候你的游戏都会被冻结,特别是当你收到大量数据时。