Ожидается метод, и программа выходит из метода до его завершения - PullRequest
1 голос
/ 29 мая 2019

Я делаю этот метод для подключения к вещам и получения доступа к токену. Когда программа запускается, она выходит из программы перед получением токена, я уже пыталась запустить программу только этим методом и ничего больше после и он получает маркер, но если после вызова этого метода я добавлю некоторый код, программа выйдет из метода журнала.

class Login
{
    public thingboardToken tbToken;
    public thingboardCredentials tbCredentials;
    public string thingsboardAPIUrl = "https://demo.thingsboard.io/api";

    public Login() {
        loginAsync();
    }

    public async System.Threading.Tasks.Task<string> loginAsync()
    {
        string requesturl = thingsboardAPIUrl + "/auth/login";

        HttpClient client = new HttpClient();

        tbCredentials = new thingboardCredentials();
        tbCredentials.username = "xxxxx";
        tbCredentials.password = "xxxxx";

        var myContent = JsonConvert.SerializeObject(tbCredentials);
        var buffer = System.Text.Encoding.UTF8.GetBytes(myContent);
        var byteContent = new ByteArrayContent(buffer);
        byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

        var response = await client.PostAsync(requesturl, byteContent);

        var responseString = await response.Content.ReadAsStringAsync();
        tbToken = JsonConvert.DeserializeObject<thingboardToken>(responseString);

        return responseString;
    }
}

Ожидается получение токена.

1 Ответ

2 голосов
/ 29 мая 2019

В вашем конструкторе вы вызываете метод async, не ожидая его.В вашем конструкторе задача loginAsync не соревновалась, но выполнение текущего метода продолжается до завершения вызова.

 public Login() {
        loginAsync();
 }

Не помещайте код инициализации в свой конструктор, вместо этого сделайте это следующим образомниже:

public class Foo
{
   public Foo() {}
   public async Task LoginAsync() { ... }
}

var obj = new Foo();
await obj.LoginAsync();

При таком подходе поток не блокируется, и он лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...