Пытаюсь разобраться с тем, как выполнить асинхронное подключение к хабу в 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!");
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Возникла проблема с чтением excel файла, мне нужно взять данные из колонки с определенным именем
Проблема в том, что при повторном запуске приложения (с защитой от повторного запуска), каким-то образом теряются правила расположения pictureBox,...
Будут ли работать программы написанные на c# (Visual Studio 2012) на ОС Windows XP? Какую версию NET Framework поддерживает XP без дополнительных установок ?