Будьте уверены, что асинхронный метод завершен - PullRequest
2 голосов
/ 07 марта 2012

В настоящее время работая над проектом с облаком / лазурью и Windows Phone 7, я должен позвонить в сервис.

Для удобства я использую резкий отдых, но я столкнулся с проблемой; Я не знаю, когда моя апелляция будет завершена.

public static bool CreateUser(User userToCreate)
{
    if (CheckNetwork())
    {
        var client = new RestClient(Global.Url);
        var request = new RestRequest("/user", Method.POST);

        MemoryStream ms = new MemoryStream();
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
        ser.WriteObject(ms, userToCreate);
        string json = JsonHelper.ToJson(userToCreate);

        request.AddHeader("Content-type", "application/json; charset=utf-8");

        request.AddParameter("application/json; charset=utf-8", json, ParameterType.RequestBody);
        request.RequestFormat = DataFormat.Json;

        try
        {
            object resp = null;
            client.ExecuteAsync(request, response =>
                                             {
                                                 if (response.ResponseStatus == ResponseStatus.Completed)
                                                 {
                                                     RestResponse resource = response;
                                                     string content = resource.Content;
                                                     resp = Convert.ToBoolean(JsonHelper.FromJson<string>(content));
                                                 }

                                             });

            return (bool)resp;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
            return false;
        }
    }
    MessageBox.Show("You are not connect to the network!");
    return false;
}

В этом примере метод возвращает сначала «resp» перед выполнением вызова службы. Как я могу быть уверен, что не выйду из этого метода до того, как он не будет заполнен?

1 Ответ

7 голосов
/ 07 марта 2012
EventWaitHandle Wait = new AutoResetEvent(false);

client.ExecuteAsync(request, response =>
{
    if (response.ResponseStatus == ResponseStatus.Completed)
    {
        RestResponse resource = response;
        string content = resource.Content;
        resp = Convert.ToBoolean(JsonHelper.FromJson<string>(content));
        Wait.Set();
    }
});

Wait.WaitOne();
...