Пытаюсь разобраться с тем, как выполнить асинхронное подключение к хабу в SignalR
. Изначально использовал такой код:
public static void ConnectSignalR()
{
Debug.Log("Starting SignalR...");
if (_chatHubConnection == null)
{
_chatHubConnection = new HubConnection(ServerURL);
_chatHubConnection.Error += _chatHubConnection_Error;
Debug.Log("Connection to " + ServerURL + " complete.");
_hubProxy = _chatHubConnection.CreateProxy("ChatHub");
Debug.Log("Proxy created.");
stateSub = _hubProxy.Subscribe("CatchState");
stateSub.Data += GetMessage;
exSub = _hubProxy.Subscribe("HandleException");
exSub.Data += GetMessage;
_chatHubConnection.Start();
Debug.Log("Started!");
}
}
Проблема в том, что пока идет попытка подключения к хабу, Unity зависает полностью, невозможно воспроизвести анимацию ожидания или вообще какое-либо действие сделать. Я хочу попытаться запустить метод подключения асинхронно, но во-первых, никогда с этим не сталкивался, во-вторых в Unity не поддерживается асинхронность (насколько мне известно). Предположительно код будет выглядеть так (тестировал в консольном клиенте - работает), но насколько это правильно мне неизвестно:
public static async Task ConnectingAsync()
{
_hubConnection = new HubConnection(connectionUrl);
await _hubConnection.Start().ContinueWith(task =>
{
if (task.IsFaulted)
{
Console.WriteLine("Failed!");
Console.ReadLine();
}
else
{
Console.WriteLine("Connected!");
Console.ReadLine();
}
});
hub = _hubConnection.CreateHubProxy("ChatHub");
hub.On<string>("HandleException", message => HandleException(message));
hub.On<string>("CatchState", message => Console.WriteLine(message));
}
Собственно, помогите разобраться, что и как нужно сделать.
UPD. Сам код на Unity:
private static HubConnection _chatHubConnection = null;
public static IHubProxy _hubProxy;
private void Start()
{
StartCoroutine(OnStart());
}
IEnumerator OnStart()
{
yield return new WaitForSeconds(2f);
Debug.Log("Starting SignalR...");
if (_chatHubConnection == null)
{
_chatHubConnection = new HubConnection(ServerURL);
_chatHubConnection.Start();
_chatHubConnection.Error += _chatHubConnection_Error;
Debug.Log("Connection to " + ServerURL + " complete.");
_hubProxy = _chatHubConnection.CreateProxy("ChatHub");
Debug.Log("Proxy created.");
_chatHubConnection.Start();
Debug.Log("Started!");
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Возникла проблема с чтением excel файла, мне нужно взять данные из колонки с определенным именем
Проблема в том, что при повторном запуске приложения (с защитой от повторного запуска), каким-то образом теряются правила расположения pictureBox,...
Будут ли работать программы написанные на c# (Visual Studio 2012) на ОС Windows XP? Какую версию NET Framework поддерживает XP без дополнительных установок ?