2017-01-16 7 views
0

Я пытаюсь разработать клиент для Телеграмма с помощью TLSharp v 0.1.0.209, что не делает ничего, кроме приема сообщений и работает немного простой логики на их содержаниеТелеграмма Аутентификация с помощью TLSharp

Мой код в настоящее время выглядит следующим образом

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using TLSharp.Core; 

namespace TelegramBot 
{ 
    public sealed class Service 
    { 
     private TelegramClient client; 

     public Service() 
     { 
      this.client = new TelegramClient(etc.Constants.AppApiId, etc.Constants.AppApiHash); 
     } 

     public async void Connect() 
     { 
      await this.client.ConnectAsync(); 
     } 

     public async void Authenticate(String phoneNumber) 
     { 
      var hash = await client.SendCodeRequestAsync(phoneNumber); 

      { 
       Debugger.Break(); 
      } 

      var code = "<code_from_telegram>"; // you can change code in debugger 

      var user = await client.MakeAuthAsync(phoneNumber, hash, code); 
     } 
    } 
} 

и I назвать это как этот

static void Main(string[] args) 
{ 
    Service bot = new Service(); 

    bot.Connect(); 
    bot.Authenticate(etc.Constants.PhoneNumber); 

    Debugger.Break(); 
} 

Однако, я получаю 'NullPointerException' при вызове 'SendCodeRequestAsync'. Как я могу это исправить? Номер предоставляется в этом формате «+12223334444»

NullPointerException

+0

Почему 'асинхронного пустоте '? –

ответ

2

Проблема в том, что async void методы не могут ожидаться. Любые исключения, брошенные ими, также не могут быть пойманы. Они предназначены только для использования в обработчиках событий или методах, подобранных событиями.

Эквивалент метода void: async Task, а не async void.

В этом случае методы должны быть изменены на:

public async Task Connect() 
    { 
     await this.client.ConnectAsync(); 
    } 

    public async Task Authenticate(String phoneNumber) 
    { 
    //... 
    } 

И Main() должен измениться:

static void Main(string[] args) 
{ 
    Service bot = new Service(); 

    bot.Connect().Wait(); 
    bot.Authenticate(etc.Constants.PhoneNumber).Wait(); 

    Debugger.Break(); 
} 

или, еще лучше:

static void Main(string[] args) 
{ 
    Service bot = new Service(); 

    Authenticate(bot).Wait(); 

    Debugger.Break(); 
} 

static async Task Authenticate(Service bot) 
{ 
    await bot.Connect(); 
    await bot.Authenticate(etc.Constants.PhoneNumber); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^